mysql 主从同步实战
主从同步
1. Master配置
-
vim /etc/my.cnf 添加以下bin_log配置
#bin_log配置 log_bin=mysql-bin server-id=1 sync-binlog=1 binlog-ignore-db=information_schema binlog-ignore-db=mysql binlog-ignore-db=performance_schema binlog-ignore-db=sys #relay_log配置 relay_log=mysql-relay-bin log_slave_updates=1 relay_log_purge=0
-
重启服务 systemctl restart mysqld
-
主库给从库授权
grant replication slave on *.* to root@'%' identified by '123456'; grant all privileges on *.* to root@'%' identified by '123456'; flush privileges; //查看主库状态信息,例如master_log_file='mysql-bin.000007',master_log_pos=154 show master status;
2. Slave配置
-
修改Slave的MySQL配置文件my.cnf,两台Slave的server-id分别设置为2和3
#bin_log配置 log_bin=mysql-bin #服务器ID,从库1是2,从库2是3 server-id=2 sync-binlog=1 binlog-ignore-db=information_schema binlog-ignore-db=mysql binlog-ignore-db=performance_schema binlog-ignore-db=sys #relay_log配置 relay_log=mysql-relay-bin log_slave_updates=1 relay_log_purge=0 read_only=1
-
重启服务 systemctl restart mysqld
-
开启同步
登录MySQL,在Slave节点的MySQL命令行执行同步操作,例如下面命令(注意参数与上面
show master status
操作显示的参数一致)change master to master_host='192.168.31.199',master_port=3306,master_user='root',master_password ='123456',master_log_file='mysql-bin.000007',master_log_pos=154; # master_log_file 和 master_log_pos都是从 show master status取 start slave; // 开启同步
接下来就可以测试了
半同步复制配置
1. master节点
-
登录mysql 安装插件
install plugin rpl_semi_sync_master soname 'semisync_master.so'; show variables like '%semi%';
-
vim /etc/my.cnf
# 自动开启半同步复制 set global rpl_semi_sync_master_enabled = ON; # 开启以后在配置文件中添加 每次重启就默认开启 rpl_semi_sync_master_enabled=ON rpl_semi_sync_master_timeout=1000
-
重启服务 systemctl restart mysqld
2. Slave配置
-
登录mysql, 执行以下命令
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
-
vim /etc/my.cnf
# 自动开启半同步复制 rpl_semi_sync_slave_enabled=ON
-
重启服务
3. 测试半同步
-
show variables like ‘%semi%';
-
cat /var/log/mysqld.log
-
可以看到日志中已经启动半同步
Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000005, 154)
并行复制配置
1. Master
-
show variables like ‘%binlog_group%';
-
设置参数
set global binlog_group_commit_sync_delay=1000; set global binlog_group_commit_sync_no_delay_count=10;
2. Slave
-
设置参数1
show variables like '%slave_parallel%'; #先停止 stop slave; set global slave_parallel_type='LOGICAL_CLOCK'; set global slave_parallel_workers=8; start slave; #最好写到配置文件, 因为重启后就失效了, 配置完要重启 slave_parallel_type=LOGICAL_CLOCK slave_parallel_workers=8 relay_log_info_repository=TABLE
-
设置参数2
show variables like '%relay_log%'; #以下需要到my.cnf配置 relay_log_recovery=1
-
查看
select * from performance_schema.replication_applier_status_by_worker; #可以查看到worker_id等
注意: 参数生效最好配置到my.conf中, 这样在重启的时候,可以继续生效