在线禁用GTID交易
本节介绍如何在已经联机的服务器上禁用GTID事务。此过程不需要使服务器脱机,并且适合在生产中使用。但是,如果在禁用GTIDs模式时可以使服务器脱机,则此过程会更容易。
该过程类似于在服务器联机时启用GTID事务,但是步骤相反。唯一不同的是您等待记录的事务复制的时间点。
在开始之前,请确保服务器满足以下前提条件:
- 拓扑中的所有服务器都必须使用MySQL 5.7.6或更高版本。除非拓扑中的所有服务器都使用此版本,否则您不能在任何单个服务器上在线禁用GTID事务。
- 所有服务器均gtid_mode设置为ON。
- --replicate-same-server-id没有在任何服务器上设置该选项。如果将此选项与- --log-slave-updates选项(默认设置)一起设置并且启用了二进制日志记录(也是默认设置),则不能禁用GTID事务。如果没有GTID,选项的这种组合会导致循环复制中的无限循环。
- 在每个从属服务器上执行以下操作,如果您使用多源复制,请对每个通道执行此操作,并包含 - FOR CHANNELchannel子句:- STOP - SLAVE [- FOR - CHANNEL 'channel'];- CHANGE - MASTER - TO - MASTER_AUTO_POSITION = 0,- MASTER_LOG_FILE =- file , \- MASTER_LOG_POS = position [- FOR - CHANNEL 'channel'];- START - SLAVE [- FOR - CHANNEL 'channel'];
- 在每台服务器上,执行: - SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
- 在每台服务器上,执行: - SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
- 在每个服务器上,等待直到变量@@ GLOBAL.GTID_OWNED等于空字符串。可以使用以下方法进行检查: - SELECT @@GLOBAL.GTID_OWNED;- 在复制从属服务器上,理论上有可能为空,然后再次变为非空。这不是问题,只需将其清空一次即可。 
- 等待任何二进制日志中当前存在的所有事务复制到所有从属服务器。有关检查所有匿名事务是否已复制到所有服务器的一种方法,请参见“验证匿名事务的复制”。
- 如果将二进制日志用于复制以外的任何其他用途,例如进行时间点备份或还原:请等到不需要具有GTID事务的旧二进制日志。 - 例如,在完成步骤5之后,您可以 - FLUSH LOGS在进行备份的服务器上执行。然后,要么明确地进行备份,要么等待您可能已设置的任何定期备份例程的下一个迭代。- 理想情况下,等待服务器清除第5步完成时存在的所有二进制日志。此外,请等待第5步到期之前进行的所有备份。 - 重要 - 这是此过程中的重要一点。重要的是要了解在下一步之后不能使用包含GTID事务的日志。在继续之前,您必须确保GTID事务在拓扑中的任何地方都不存在。 
- 在每台服务器上,执行: - SET @@GLOBAL.GTID_MODE = OFF;
- 在每台服务器上, - gtid_mode=OFF在中设置- my.cnf。- 如果要设置 - enforce_gtid_consistency=OFF,则可以立即进行设置。设置之后,您应该将其添加- enforce_gtid_consistency=OFF到配置文件中。
如果要降级到MySQL的较早版本,可以立即使用正常的降级过程进行降级。
