Mysql主从分离
配置主服务器(Master)
1、修改 MySQL 配置文件(my.cnf 或 my.ini)
[mysqld] log-bin=mysql-bin # 启用二进制日志 server-id=1 # 设置唯一的 server-id,通常 master 为 1 binlog-do-db=test # 指定要复制的数据库
2、重启 MySQL 服务
sudo systemctl restart mysql
3、创建复制账号
CREATE USER 'testuser'@'%' IDENTIFIED BY 'testpassword'; GRANT REPLICATION SLAVE ON *.* TO 'testuser'@'%'; FLUSH PRIVILEGES;
4、获取主服务器的二进制日志信息
执行以下命令,记下二进制日志文件和位置:
SHOW MASTER STATUS;
输出类似如下:
+---------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | test | | +---------------------+----------+--------------+------------------+
配置从服务器(Slave)
1、修改从服务器的 MySQL 配置文件
[mysqld] server-id = 2 # 从服务器的唯一 ID,通常为 2 relay_log = /var/log/mysql/mysql-relay-bin.log # 启用中继日志 log_bin = /var/log/mysql/mysql-bin.log # 启用 binlog read_only = 1 # 设置从库为只读模式,防止直接写数据
2、重启 MySQL 服务
sudo systemctl restart mysql
3、配置从服务器连接到主服务器
CHANGE MASTER TO MASTER_HOST='master_ip', # 主库的 IP 地址 MASTER_USER='testuser', # 复制用户 MASTER_PASSWORD='testpassword', # 复制用户的密码 MASTER_LOG_FILE='mysql-bin.000001', # 主库的 binlog 文件名 MASTER_LOG_POS= 107; # 主库的 binlog 位置 MASTER_PORT=3306; -- 如果主库使用的端口不是默认的 3306,记得修改
在这种方式下,你明确指定了从库开始复制的 binlog 文件 和 binlog 位置。
- MASTER_LOG_FILE='mysql-bin.000001':从库将从主库的
mysql-bin.000003
文件开始复制数据。 - MASTER_LOG_POS=107:从库将从主库的二进制日志文件
mysql-bin.000003
的位置 157 开始复制。
这种方式通常用于以下场景:
- 你已经在主库上进行了一些更改并且希望从特定位置开始复制。
- 恢复某个时间点的复制,或者重新启动复制
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='testuser', MASTER_PASSWORD='testpassword', MASTER_PORT=3306; -- 如果主库使用的端口不是默认的 3306,记得修改
MASTER_LOG_FILE
和MASTER_LOG_POS
:如果主库的二进制日志没有启用,或者你只是初次设置复制(或者你不关心从哪个二进制日志文件开始),这两个参数可以省略。MySQL 会自动选择最新的二进制日志文件。
4、启动从库复制进程:START SLAVE;
5、查看从库的状态:
SHOW SLAVE STATUS;
- MASTER_LOG_FILE='mysql-bin.000001':从库将从主库的
重新初始化复制
如果主从库数据不一致或复制断开,可以尝试重新初始化复制过程:
在从库上停止复制:
STOP SLAVE; RESET SLAVE ALL;
在主库上查看当前的二进制日志文件和位置:
SHOW MASTER STATUS;
在从库上配置复制信息:
CHANGE MASTER TO MASTER_HOST = '主库IP', MASTER_USER = 'testuser', MASTER_PASSWORD = 'testpassword', MASTER_LOG_FILE = '记录的File', MASTER_LOG_POS = 记录的Position;
启动从库的复制进程:
START SLAVE;
评论 (0)