本人微信公众号"aeolian"~

Mysql5.7基于日志转为基于事务主从复制

 将基于日志的复制变更为基于事务的复制

mysql版本要高于5.7.6

gtid_mode要设为off

处理步骤

《Mysql5.7基于日志转为基于事务主从复制》

《Mysql5.7基于日志转为基于事务主从复制》

详细步骤

1.查看主从mysql版本是否高于5.7.6

show variables like ‘version’;

《Mysql5.7基于日志转为基于事务主从复制》

2.查看主从服务器mysql的gtid_mode是否为off

show variables like ‘gtid_mode’;

《Mysql5.7基于日志转为基于事务主从复制》

以下操作主从服务器同时设置

3.设置主从服务器,注意查看mysql的log。

set @@global.enforce_gtid_consistency=warn;

《Mysql5.7基于日志转为基于事务主从复制》

set @@global.enforce_gtid_consistency=on;

《Mysql5.7基于日志转为基于事务主从复制》

set @@global.gtid_mode=off_permissive;

《Mysql5.7基于日志转为基于事务主从复制》

set @@global.gtid_mode=on_permissive;

《Mysql5.7基于日志转为基于事务主从复制》

查看是否已经改变状态    show variables like ‘gtid_mode’;

《Mysql5.7基于日志转为基于事务主从复制》

 

show status like ‘ongoing_anonymous_transaction_count’;  只查询从,出现空值或者0都是可以的

《Mysql5.7基于日志转为基于事务主从复制》

set @@global.gtid_mode=on;

《Mysql5.7基于日志转为基于事务主从复制》

以下操作从服务器设置

改变auto_position状态

stop slave;

change master to master_auto_position=1;

start slave;

 《Mysql5.7基于日志转为基于事务主从复制》

show slave status; 多了Gtid的设置,其他一样

《Mysql5.7基于日志转为基于事务主从复制》

Error

上述步骤刚做完,发现一个进程没启动,报一个1032的error。

《Mysql5.7基于日志转为基于事务主从复制》

解决方法:跳过error

(1)停止slave进程

mysql> STOP SLAVE;

(2)设置事务号,事务号从Retrieved_Gtid_Set获取

在session里设置gtid_next,即跳过这个GTID,这里选Retrieved_Gtid_Set(未执行)存在且Executed_Gtid_Set(已执行)不存在的(其中-代表范围)

mysql> SET @@SESSION.GTID_NEXT= ‘8f9e146f-0a18-11e7-810a-0050568833c8:4’

(3)设置空事物

mysql> BEGIN; COMMIT;

(4)恢复事物号

mysql> SET SESSION GTID_NEXT = AUTOMATIC;

(5)启动slave进程

mysql> START SLAVE;

事务转日志链接 

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *