在线切换的版本要>=5.7.6
gitd_mode | 解释 |
---|---|
OFF | 不产生GTID,Slave只接收不带GTID的事务 |
OFF_PERMISSIVE | 不产生GTID,Slave接收不带GTID的事务也接收带GTID的事务 |
ON_PERMISSIVE | 产生GTID,Slave接收不带GTID的事务也接收带GTID的事务 |
ON | 产生GTID,Slave只接收带GTID的事务 |
环境
- MySQL版本为5.7.18
- Master
- 192.168.1.102 3306 GTID
- Slave
- 192.168.1.103 3306 GTID
实验一 将GTID的环境切换到非GTID
- stop slave;
- change master to master_auto_position=0;
- start slave;
- 主从库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE
- 主库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE
- 这个时候已经从gtid转到传统复制了,不过还是中间状态
- 在从库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE
- 主从库执行select @@GLOBAL.GTID_OWNED;是不是为空
- 主库执行set global gtid_mode=0;
- 主库执行set global enforce_gtid_consistency=off;
- 记得配置文件修改
实验二 将传统复制切换到GTID复制
- 在主从库执行set global enforce_gtid_consistency=WARN;
- 在主从库执行 set global enforce_gtid_consistency=on;
- 主从库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
- 在从库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
- 在主库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
- 查看show status like 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';是否为0,等于0是表示所有连接都转为gtid复制
- 主从库执行set global gtid_mode=on;
- stop slave;
- change master to master_auto_position=1;
- start slave;
- 记得更改配置文件