搭建 MySQL 数据库主从复制
1、 MySQL 主从复制原理
主机将修改信息放在二进制日志(Binary log)中 , 通过网络IO 到从机所在地 , 然后写入 中继日志(Relay log) 最后同步到从机
2、主机配置(88.169)
[root@88 conf]# vi /etc/my.cnf
追加
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=testdb
binlog-do-db=orders
#设置logbin格式
binlog_format=STATEMENT
binlog 日志三种格式
日志格式 | 优点 | 缺点 |
---|---|---|
STATEMENT (默认) |
1、解决了row level的缺点,不需要记录每一行的变化。 2、日志量少,节约IO,从库应用日志块。 |
一些新功能同步可能会有障碍,比如函数、触发器等 |
ROW | 1、记录详细 2、解决statement level模式无法解决的复制问题。 |
日志量大,因为是按行来拆分 |
MIXED | statement和row之间选择一种 |
通过binlog_format
指定
查看: show variables like "%binlog_format%";
快速修改: set global binlog_format='MIXED';
3、从机配置(88.170)
[root@88 conf]# vi /etc/my.cnf
追加
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
4、主机、从机重启 MySQL 服务
mysql restart
5、主机从机都关闭防火墙
# 查看防火墙状态
[root@88 conf]# systemctl status firewalld
# 关闭防火墙
[root@88 conf]# systemctl stop firewalld
6、在主机(88.169)上建立帐户并授权 slave
# 123123 为密码
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
查询master的状态
show master status;
记录下File
和Position
的值
执行完此步骤后不要再操作主服务器MySQL
,防止主服务器状态值
变化
7、在从机上配置需要复制的主机
命令模板
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
例:
CHANGE MASTER TO MASTER_HOST='66.88.88.169',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=154;
启动从服务器复制功能
start slave;
查看从服务器状态
show slave status\G;
下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果出错 ,看error提示
主从复制配置完成
8、如何停止从服务复制功能
stop slave;
9、如何重新配置主从
stop slave;
reset master;
均在mysql 中执行
10 如果需要多
从机 , 只需要配置从机
即可
binlog 日志三种格式参考地址 : https://blog.csdn.net/m0_37814112/article/details/78638359