我不知道如何描述它,所以我称它为半圆。这就是我在做什么。
服务器 A
服务器 B = 这是服务器 A 的从服务器
服务器 C = 这是服务器 B 的从服务器
当我在服务器 A 上更新某些内容时,它会反映在服务器 B 上。但是相同的更改不会反映在服务器 C 上。
只有当我在服务器 B 上更新某些内容时,更改才会反映在服务器 C 上。
我如何做到这一点,以便在服务器 A 上完成的任何更改都会到达服务器 B(已经在工作)然后转到服务器 C?
编辑
经过调查,我发现当我在服务器 A 上进行一些更改时,它的日志文件位置会发生变化。但是当这些更改反映在服务器 B 上时,服务器 B 日志文件位置不会改变。正是由于这个原因,除非我在服务器 B 上明确更改某些内容(插入、更新、删除),否则服务器 C 不知道服务器 B 是否有任何更改。
那么有没有办法告诉 MySQL 在 Slave 从 Master 接收更新时增加日志文件的位置?
我认为问题如下:
由于 B 是 A 的 Slave,因此当 A 上的某些内容被执行时,复制日志位置会发生变化,然后将更改记录到其二进制日志中。服务器 B 获取服务器 A 的二进制日志事件并执行它。
为什么服务器 B 不将其传递给服务器 C?
服务器 B 需要启用以下选项
每当您希望服务器同时成为 Slave 和 Master 时,您需要启用log_slave_updates。这是 MySQL 文档所说的:
在您的情况下,服务器 B 读取服务器 B 的中继日志中记录的服务器 A 的二进制日志事件,在服务器 B 中执行这些事件,仅此而已。
在 Server B 上启用log_slave_updates时,会发生以下情况
我之前提到过几次使用log_slave_updates :
Sep 09, 2014
:使用 GTID 的 MySQL 复制是否必须启用 --log_slave_updates?Nov 26, 2012
:将 MySQL 5.0 Master 复制到 5.5 Slave?因此,当你说
当
explicitly change something
您使用log_slave_updates时, 变得隐式。