mysql在线将基于日志的复制和基于事务的复制互换

在mysql5.7之前,变更复制类型,需要重启master。基于事务的复制能够更好的保证数据的完整性。
1.在线将基于日志的复制变更为基于事务的复制
条件
1)集群中所有的服务器版本要高于5.7.6
2)集群中所有服务器的gtid_mode都设置为off
处理步骤
(1) 主从上执行  set @@global.enforce_gtid_consistency=warn
执行完后查看mysql日志没有错误信息,
打印log:2016-05-07T18:12:23.972070Z 6 [Note] Changed ENFORCE_GTID_CONSISTENCY from OFF to WARN.
(2) 主从上执行 set @@global.enforce_gtid_consistency=on
打印log:2016-05-07T18:15:44.249460Z 9 [Note] Changed ENFORCE_GTID_CONSISTENCY from WARN to ON.
(3) 主从上执行 set @@global.gtid_mode=off_permissive
打印log:2016-05-07T18:16:45.417557Z 9 [Note] Changed GTID_MODE from OFF to OFF_PERMISSIVE.
(4) 主从上执行 set @@global.gtid_mode=on_permissive
打印log:2016-05-07T18:20:46.307022Z 10 [Note] Changed GTID_MODE from OFF_PERMISSIVE to ON_PERMISSIVE.
(5) 从上执行  show status like 'ongoing_anonymous_transaction_count';
显示 0值或者空值即可,如果非0 需要等待同步事务全部执行完成。
(6) 主从上执行 set @@global.gtid_mode =on;   #并加gtid-mode=on到my.cnf
打印:2016-05-07T18:24:39.581763Z 11 [Note] Changed GTID_MODE from ON_PERMISSIVE to ON.
可以通过show variables like '%gtid_mode%';查看状态
(7)从上执行  stop slave [for channel 'channel'];
(8) 从上执行 change master to master_auto_position=1 [for channel 'channel'];
(9) 从上执行 start slave [for channel 'channel'];
完成后,可以通过 show slave status \G;查看同步复制状态;
Auto_Position: 1

2.在线将基于事务的复制变更为基于日志的复制
条件
1)集群中所有的服务器版本要高于5.7.6
2)集群中所有服务器的gtid_mode都设置为on
处理步骤
(1) 从上执行 stop slave [for channel 'channel'];
(2)从上执行  change master to master_auto_position=0 [for channel 'channel'],
                     master_log_file='mysql-master-bin.000004',master_log_pos=448;
                    start slave;
(4)主从上执行 set @@global.gtid_mode=on_permissive
(5)主从上执行 set @@global.gtid_mode=off_permissive
(6)主从上查看  select @@global.gtid_owned;
在所有机器上都为空时,进行下面操作。
(7)主从上执行 set @@global.gtid_mode=off #在my.cnf中修改 gtid-mode=off
(8)主从上执行 set @@global.enforce_gtid_consistency=off

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章