阅读该篇之前,请确认已经了解了上一篇《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变化