Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Disabling GTID Transactions Online

19.1.4.3 在线禁用 GTID 事务

本节描述了在线禁用 GTID 事务的过程。这一过程不需要将服务器停机,并且适用于生产环境。但是,如果您可以在禁用 GTIDs 模式时将服务器停机,这个过程将更简单。

禁用 GTID 事务的过程与在线启用 GTID 事务的过程类似,但反向执行步骤。唯一的区别是,在等待已日志的事务复制的点。

在开始之前,所有服务器都必须满足以下条件:

  • 所有服务器的gtid_mode设置为ON

  • 服务器上没有设置--replicate-same-server-id选项。您不能禁用 GTID 事务,如果同时设置了--log-replica-updates选项(默认)和启用二进制日志记录(也默认)。在没有 GTIDs 的情况下,这种组合将在环回复lication中引发无限循环。

  1. 在每个副本上执行以下命令;如果使用多源复制,需要在每个通道上执行,并包括FOR CHANNEL 'channel'子句:

    STOP REPLICA [FOR CHANNEL 'channel'];
    
    CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION = 0, 
      SOURCE_LOG_FILE = file, 
      SOURCE_LOG_POS = position [FOR CHANNEL 'channel'];
    
    START REPLICA [FOR CHANNEL 'channel'];
  2. 在每个服务器上执行以下语句:

    SET @@GLOBAL.gtid_mode = ON_PERMISSIVE;
  3. 在每个服务器上执行以下语句:

    SET @@GLOBAL.gtid_mode = OFF_PERMISSIVE;
  4. 在每个服务器上等待gtid_owned等于空字符串的点;可以使用以下方式检查:

    SELECT @@GLOBAL.gtid_owned;

    在副本上可能会出现这种情况,然后再次出现。这不是问题,只要在某个时间点为空。

  5. 等待所有当前存在于任何二进制日志中的事务在所有副本上被提交。请参阅第19.1.4.4节,“Verifying Replication of Anonymous Transactions”了解检查所有匿名事务是否已复制到所有服务器的方法。

  6. 如果您使用二进制日志记录来执行其他操作,例如点时备份或恢复—等待您不再需要包含 GTID 事务的旧二进制日志。

    例如,在上一步骤完成后,您可以在服务器上执行FLUSH LOGS。然后,您可以手动备份或等待下一个备份计划的下一个迭代。

    理想情况下,您应该等待服务器 purge 所有在上一步骤完成时存在的二进制日志,并等待在备份之前存在的所有备份过期。

    您应该记住,包含 GTID 事务的日志不能在下一步骤后使用。因此,在继续之前,您必须确保在拓扑结构中不存在未提交的 GTID 事务。

  7. 在每个服务器上执行以下语句:

    SET @@GLOBAL.gtid_mode = OFF;
  8. 在每个服务器上,在my.cnf文件中设置gtid_mode=OFF。可选地,您还可以设置enforce_gtid_consistency=OFF;完成后,您也需要将enforce_gtid_consistency=OFF添加到配置文件中。

如果您想降级到 MySQL 的较早版本,可以现在使用正常的降级过程。