在线切换的版本要>=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.28
  • 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;是不是为空,直到输出值为空;等待存在于binlog 中的事物都已经apply到slave

主从库执行set global gtid_mode=0;

主库执行set global enforce_gtid_consistency=off;

记得配置文件修改

gtid-mode=ON

enforce-gtid-consistency=ON

实验二 将传统复制切换到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;

CHANGE MASTER TO  MASTER_HOST='192.168.0.105', MASTER_USER='auto_repl', MASTER_PASSWORD='repbyxf123', MASTER_PORT=3333,MASTER_AUTO_POSITION = 1;

start slave;

记得更改配置文件