本节介绍如何监控复制拓扑并验证是否已复制所有匿名事务。这在在线更改复制模式时很有用,因为您可以验证更改为 GTID 事务是否安全。
有几种可能的方法来等待事务复制:
最简单的方法,无论您的拓扑如何,但都依赖于时间,如下所示:如果您确定副本永远不会滞后超过 N 秒,只需等待 N 秒多一点。或等待一天,或您认为对部署安全的任何时间段。
一种不依赖于时间的更安全的方法:如果您只有一个包含一个或多个副本的源,请执行以下操作:
在源上,执行:
SHOW MASTER STATUS;
记下
File
和Position
列中的值。在每个副本上,使用来自源的文件和位置信息来执行:
SELECT MASTER_POS_WAIT(file, position); Or from MySQL 8.0.26: SELECT SOURCE_POS_WAIT(file, position);
如果您有一个源和多个副本级别,或者换句话说,您有副本的副本,请在每个级别上重复步骤 2,从源开始,然后是所有直接副本,然后是副本的所有副本,依此类推。
如果您使用循环复制拓扑,其中多个服务器可能有写入客户端,请对每个源副本连接执行步骤 2,直到完成整个循环。重复整个过程,这样你就可以完成 两次完整的圆圈。
例如,假设您有三台服务器 A、B 和 C,以 A -> B -> C -> A 的方式进行复制,然后执行以下过程:
在 A 上执行步骤 1,在 B 上执行步骤 2。
在 B 上执行步骤 1,在 C 上执行步骤 2。
在 C 上执行步骤 1,在 A 上执行步骤 2。
在 A 上执行步骤 1,在 B 上执行步骤 2。
在 B 上执行步骤 1,在 C 上执行步骤 2。
在 C 上执行步骤 1,在 A 上执行步骤 2。