MySQL 中主从半圆复制不起作用

MySQL 中主从半圆复制不起作用

我不知道该如何描述它,所以我称它为半圆形。这就是我正在做的事情。

服务器 A
服务器 B = 这是服务器 A 的从属
服务器 C = 这是服务器 B 的从属

当我在服务器 A 上更新某些内容时,该更新会反映在服务器 B 上。但相同的更改不会反映在服务器 C 上。

仅当我在服务器 B 上更新某些内容时,更改才会反映在服务器 C 上。

我怎样才能使在服务器 A 上所做的任何更改都到达服务器 B(已经在运行),然后再到达服务器 C?

编辑
经过调查,我发现当我在服务器 A 上进行某些更改时,其日志文件位置会发生变化。但是当这些更改反映在服务器 B 上时,服务器 B 日志文件位置不会改变。正是由于这个原因,除非我在服务器 B 上明确更改某些内容(插入、更新、删除),否则服务器 C 不知道服务器 B 上是否有任何更改。

那么,有没有办法告诉 MySQL 在 Slave 接收来自 Master 的更新时增加日志文件的位置?

答案1

仅供参考——这通常称为复制中继链。为了启用此功能,您必须确保在服务器 B 上设置以下设置:

log_bin
log_slave_updates

这将告诉服务器 B 在收到来自 A 的更新时更新其日志位置。有关此内容的文档可以找到这里(强调添加):

通常,从服务器不会将从主服务器收到的任何更新写入其自己的二进制日志。此选项使从服务器将其 SQL 线程执行的更新写入其自己的二进制日志。要使此选项生效,从服务器还必须使用--log-bin启用二进制日志记录的选项。当您想要链接复制服务器时使用 --log-slave-updates。例如,您可能希望使用以下安排设置复制服务器

A -> B -> C

这里,A 充当从属 B 的主设备,B 充当从属 C 的主设备。要使此操作有效,B 必须同时是主设备也是从属设备。必须使用以下命令启动 A 和 B--log-bin启用二进制日志记录,并使用 B--log-slave-updates选项,以便从 A 收到的更新被 B 记录到其二进制日志中。

相关内容