mysql 5.7在线开启/关闭GTID【转】

发布时间 2023-09-22 10:19:26作者: paul_hch

一、在线开启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