STOP GROUP_REPLICATION
停止组复制。此语句需要 GROUP_REPLICATION_ADMIN
权限(或已弃用的 SUPER
权限)。当您发出 STOP GROUP_REPLICATION
时,成员将设置为 super_read_only=ON
,这将确保在组复制停止时,不会对成员进行任何写入操作。成员上运行的任何其他异步复制通道也将停止。您在启动组复制时在 START GROUP_REPLICATION
语句中指定的任何用户凭据都将从内存中删除,并且必须在再次启动组复制时提供。
谨慎使用此语句,因为它会将服务器实例从组中移除,这意味着它不再受组复制的一致性保证机制的保护。为了确保安全,请确保您的应用程序在发出此语句之前无法连接到该实例,以避免任何 stale 读取的可能性。
语句 STOP GROUP_REPLICATION
会停止组成员上的异步复制通道,但它不会像 STOP REPLICA
一样隐式地提交正在进行的事务。这是因为在组复制组成员上,在关闭操作期间提交的额外事务会导致成员与组不一致,并导致重新加入问题。为了避免在停止组复制时正在进行的事务提交失败,STOP GROUP_REPLICATION
语句不能在将 GTID 指定为系统变量 gtid_next
值时发出。
系统变量 group_replication_components_stop_timeout
指定了在发出此语句后,组复制等待其每个模块完成正在进行的进程的时间。该超时用于解决组复制组件无法正常停止的情况,这种情况可能发生在成员在错误状态下被逐出组时,或者在诸如 MySQL Enterprise Backup 这样的进程在成员上的表上持有全局锁时。在这种情况下,成员无法停止 applier 线程或完成分布式恢复过程以重新加入。除非情况得到解决(例如,锁被释放),或者组件超时过期并且模块无论其状态如何都被关闭,否则 STOP GROUP_REPLICATION
不会完成。默认值为 300 秒;这意味着如果在该时间之前情况没有得到解决,组复制组件将在 5 分钟后停止,允许成员重新启动并重新加入。