Documentation Home

17.1.3.5 禁用 GTID 事务

如果您在 MySQL 5.6 中启用了 GTID,并且想要降级到不支持 GTID 的 MySQL 版本,则必须在降级之前执行此过程以禁用 GTID。在 MySQL 5.6 中,您必须使服务器脱机才能禁用 GTID。

  1. 在每个副本上,通过运行以下语句禁用自动定位:

    STOP SLAVE;
    CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, \
    MASTER_LOG_POS = position;
    START SLAVE;
  2. 在每台服务器上,通过运行以下语句停止更新:

    SET @@GLOBAL.READ_ONLY = ON;
  3. 等待所有正在进行的事务提交或回滚。然后,根据您的部署,等待一段安全的时间,让当前存在于任何二进制日志中的所有事务复制到所有副本。在继续之前确保所有副本都处理了所有更新是非常重要的

    如果您将二进制日志用于除复制之外的任何其他用途,例如进行时间点备份和恢复,请等到您不需要包含 GTID 事务的旧二进制日志。理想情况下,等待服务器清除所有二进制日志,并等待任何现有备份过期。

    重要的

    重要的是要了解包含 GTID 事务的日志不能在禁用 GTID 的服务器上使用。在继续之前,您必须确保拓扑中的任何地方都不存在 GTID 事务。

  4. 使用mysqladmin 停止每个服务器,如下所示,其中username是具有足够权限关闭服务器的 MySQL 用户的用户名:

    $> mysqladmin -uusername -p shutdown

    然后在出现提示时提供该用户的密码。

  5. 在每台服务器上,设置 gtid_mode=OFFenforce_gtid_consistency=OFFmy.cnf.

  6. 以只读模式重新启动每个服务器,使用 mysqld_safe或另一个 mysqld启动脚本,并--read_only=ON在命令行上指定选项。以只读模式启动服务器可防止在任何服务器上执行不需要或意外的更新。

  7. 此时进行新的备份,这样您就不会没有可用的备份。在禁用 GTID 之前创建的现有备份不能再在这些服务器上使用,因为您已禁用 GTID。例如,您可以FLUSH LOGS在进行备份的服务器上执行。然后明确地进行备份或等待您可能已设置的任何定期备份例程的下一次迭代。

  8. 在每台服务器上,通过运行以下语句重新启用更新:

    SET @@GLOBAL.READ_ONLY = OFF;

如果你想降级到一个早期版本的 MySQL,你现在可以这样做,使用正常的降级过程。