MySQL 在线切换 GTID 复制模式

1.在线将传统模式复制改为 GTID 复制模式

1)在每一台服务器上设置 ENFORCE_GTID_CONSISTENCY=WARN ,设置后,所有事务都允许违反 GTID 的一致性。

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;

注意:这一步非常重要,在进行下一步之前,需要确保在错误日志中无任何警告。

2)在每一台服务器上设置 ENFORCE_GTID_CONSISTENCY=ON,确保所有的事务都不能违反 GTID 的一致性。

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;

3)在每一台服务器上设置 GTID_MODE=OFF_PERMISSIVE ,表示新的事务是匿名的,同时允许复制的事务是GTID或是匿名的。

SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;

注意:需要确保这一步操作在所有的服务器上都执行。

4)在每一台服务器上设置 GTID_MODE=ON_PERMISSIVE ,表示新的事务使用 GTID,同时允许复制的事务是 GTID 或是匿名的。

SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;

注意:需要确保这一步操作在所有的服务器上都执行。

5)等待 ONGOING_ANONYMOUS_TRANSACTION_COUNT 状态值为 0 ,表示已标记为匿名的正在进行的事务数量,如果状态值为 0 表示无事务等待被处理。

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

注意:在所有从库上查询该状态,必须要为0才能进行下一步。

6)在每一台服务器上设置 GTID_MODE=ON ,表示在所有服务器上开启 GTID。

SET @@GLOBAL.GTID_MODE=ON;

注意:需要在所有的实例上执行。

7)修改 my.cnf 的配置。

enforce_gtid_consistency=1
gtid_mode=ON

8)将复制模式从基于 binlog 位置调整为基于 GTID 模式。

STOP SLAVE;
CHANGE MASTER_AUTO_POSITION=1;
START SLAVE;

2.在线将 GTID 模式复制改为传统模式复制

1)关闭基于 GTID 模式的复制,调整为传统复制。

STOP SLAVE;

# 假设复制关闭后,复制的位置为mysql-bin.000006:123
CHANGE MASTER_AUTO_POSITION=0,MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=123;

START SLAVE;

2)在每一台服务器上设置 GTID_MODE=ON_PERMISSIVE

SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;

3)在每一台服务器上设置 GTID_MODE=OFF_PERMISSIVE

SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;

4)等待所有的服务器上的变量 @@GLOBAL.GTID_OWNED 为空,表示正在由线程执行的全局 GTID 集合;
5)等待所有的 SLAVE 上都复制完成匿名事务。
6)在每一台服务器关闭 GTID 。

SET @@GLOBAL.GTID_MODE=OFF;

7)修改 my.cnf 的配置。

enforce_gtid_consistency=OFF
gtid_mode=OFF	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值