MySQL--在线基于日志的复制变更为基于事务的复制

阅读该篇之前,请确认已经了解了上一篇《MySQL基于日志点的复制操作》

操作环境:
CentOS:7.2 64bit
MySQL:5.7.22

先决条件:
1. 集群中所有服务器的版本均高于5.7.6
2. 集群中所有服务器gitd_mode都设置为off

涉及的内容有9个操作,如下:

mysql> set @@global.enforce_gtid_consistency=warn;
mysql> set @@global.enforce_gtid_consistency=on;
mysql> set @@global.gtid_mode=off_permissive;
mysql> set @@global.gtid_mode=on_permissive;

mysql> show status like 'ongoing_anonymous_transaction_count';
mysql> set @@global.gtid_mode=on;

mysql> stop slave;
mysql> change master to master_auto_position=1;
mysql> start slave;

详细步骤:

mysql> show variables like '%version%'; //查看mysql版本是否大于5.7.6
mysql> show variables like 'gtid_mode'; //查看gtid_mode是否为off状态
mysql> set @@global.enforce_gtid_consistency=warn;
// 这一步操作完,需要查看error log中是否有该sql语句操作的错误信息
// 通过查看cat /etc/my.cnf知道log-error=/var/log/mysqld.log, 因此查看该文件
shell> tail -f /var/log/mysqld.log
//如下图所示,没有报错

这里写图片描述

mysql> set @@global.enforce_gtid_consistency=on;
mysql> set @@global.gtid_mode=off_permissive; //gtid_mode的状态要按照顺序设置
// 同样确认error log中是否有错误信息
mysql> set @@global.gtid_mode=on_permissive;

//查看gtid_mode的状态
mysql> show variables like 'gtid_mode';
// 
mysql> show status like 'ongoing_anonymous_transaction_count';
//如下图结果,空值或者0值都是可以的。说明不存在anonymous的数据了

这里写图片描述

mysql> set @@global.gtid_mode=on;

//
mysql> show variables like 'gtid_mode';

Master和Slave都要进行上面的配置

配置完后,操作Slave

mysql> stop slave;
mysql> change master to master_auto_position=1;
mysql> start slave;
// 发现Master_Log_File已经变更了,如图

这里写图片描述

检查变更复制类型之后管理视图的变化

mysql> use performance_schema;
mysql> show tables like 'replication%';
//查看channel_name和desired_delay
mysql> select * from replication_applier_configuration; 
mysql> select * from replication_applier_status;
mysql> select * from replication_connection_configuration; // 查看到AUTO-POSITION=1
mysql> select * from replication_connection_status;//查看Executed_Gtid_Set变化

猜你喜欢

转载自blog.csdn.net/shfscut/article/details/81050327