您的位置:首页 > 数据库 > MySQL

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

2016-12-04 22:02 274 查看
在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