在线启用GTID

本节介绍如何在已经联机并且使用匿名事务的服务器上启用GTID事务。此过程不需要让服务器停止服务,并适合在生产中使用。当然,如果在启用GTID事务时可以使服务器停止服务,则处理过程会更容易。

在开始之前,请确保服务器满足以下前提条件:

  • 拓扑中的服务器都必须使用MySQL 5.7.6或更高版本。除非拓扑中的服务器都使用符合条件的同样版本,否则不能确保可以在线启用GTID事务。

  • 所有服务器均[gtid_mode]为默认值OFF

可以随时暂停以下过程,之后将其恢复原样,该过程具有容错性。

注意

在继续下一步之前,确保完成上一步的操作至关重要。

要启用GTID,请执行以下操作:

在每台服务器上,执行:

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;

让服务器在正常在线的情况下一段时间并监视日志。如果在日志中发现任何警告,请调整您的应用程序,使其使用与GTID兼容的功能,确保不会生成任何警告。

这是重要的第一步。在继续下一步之前,必须确保错误日志中未生成任何警告。

在每台服务器上,执行:

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;

在每台服务器上,执行:

SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

哪个服务器首先执行此语句并不重要,但是重要的是所有服务器都必须先完成此步骤,然后任何服务器才开始执行下一步。

在每台服务器上,执行:

SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

哪个服务器先执行此语句并不重要。

在每台服务器上,等待状态变量ONGOING_ANONYMOUS_TRANSACTION_COUNT为零。可以使用以下命令进行检查:

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

注意:

在从库上,它有可能显示为零,然后再次显示为非零。这不是问题,只要显示一次为零即可。等待匿名事务都被从库执行完毕。

在每台服务器上,执行:

SET @@GLOBAL.GTID_MODE = ON;

在每个服务器上,将 gtid_mode=ONenforce_gtid_consistency=ON 添加到my.cnf

现在,所有事务都已具有GTID。要开始使用GTID协议以便以后可以执行自动故障转移,请在每个从库上执行以下命令。(可选)如果使用多源复制,请对每个通道执行此操作,并包含以下子句:FOR CHANNELchannel

STOP SLAVE [FOR CHANNEL 'channel'];
CHANGE MASTER TO MASTER_AUTO_POSITION = 1 [FOR CHANNEL 'channel'];
START SLAVE [FOR CHANNEL 'channel'];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值