本文主要是介绍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
这篇关于mysql在线将基于日志的复制和基于事务的复制互换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!