一、在线开启gtid步骤
步骤1到步骤5在每个mysql节点都执行,不可以单独某个库独立做完所有步骤再去操作其他节点;尤其注意不能先将主库打开gtid,从库任何参数不设置,这样将导致同步中断。
1、检查数据库中是否有不支持gtid的操作
设置ENFORCE_GTID_CONSISTENCY = WARN,运行一段时间,最好包含一天负载最高的时间段,有条件建议观察2~3天,检查日志是否有告警产生
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
2、如果步骤1没有告警产生,设置ENFORCE_GTID_CONSISTENCY为ON
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
3、设置GTID_MODE = OFF_PERMISSIVE,所有服务器必须执行完这一步之后才能执行下一步:
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
该命令的效果:服务器不产生GTID,但是能够接受不带GTID的事务,也能够接受带GTID的事务
4、设置GTID_MODE = OFF_PERMISSIVE
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
该命令的效果:服务器产生GTID,但是能够接受不带GTID的事务,也能够接受带GTID的事务
5、确保在线的匿名事务数为0,设置GTID_MODE=ON
SHOW STATUS LIKE ‘ONGOING_ANONYMOUS_TRANSACTION_COUNT’;
SET @@GLOBAL.GTID_MODE = ON;
6、重启slave,设置为GTID模式
STOP SLAVE [FOR CHANNEL ‘channel’];
CHANGE MASTER TO MASTER_AUTO_POSITION = 1 [FOR CHANNEL ‘channel’];
START SLAVE [FOR CHANNEL ‘channel’];
7、将gtid参数配置到参数文件中
ENFORCE_GTID_CONSISTENCY = ON
GTID_MODE=ON
以上可以写入查看binlog验证,binlog可体现是否开启gtid
二、在线关闭GTID模式操作步骤
1、关闭复制,找到复制位置,切换到传统模式
stop slave;
change master to master_host=‘xxx’,master_port=3306,master_user=‘repl’,master_password=‘root’,master_log_file=‘3306-bin.000056’,master_log_pos=897553222,MASTER_AUTO_POSITION = 0;
##以从库的Relay_Master_Log_File和Exec_Master_Log_Pos 作为MASTER_LOG_FILE和MASTER_LOG_POS 来指定复制开始位置。
##必须要指定MASTER_AUTO_POSITION = 0,否则会有如下报错:
start slave;
2、主备依次设置GTID_MODE为ON_PERMISSIVE、OFF_PERMISSIVE
set @@global.gtid_mode=ON_PERMISSIVE;
set @@global.gtid_mode=OFF_PERMISSIVE;
3、检查global.gtid_owned变量字符串已经为空
select @@global.gtid_owned;
4、主备库关闭GTID
SET @@GLOBAL.GTID_MODE = OFF;
enforce_gtid_consistency=OFF
5、将gtid参数配置到参数文件中
ENFORCE_GTID_CONSISTENCY = OFF
GTID_MODE=OFF
————————————————
转自
mysql 5.7在线开启/关闭GTID_mysql 关闭gtid_程序员小软的博客-CSDN博客
https://blog.csdn.net/hellomrp/article/details/128183983