我有 4 个服务器:A、B、C 和 D。
A 和 B 处于主-主设置中。
C是B的奴隶,D是C的奴隶。
A 或 B 上的更改会到达 D 以外的所有节点。我需要它们到达 D
C 上的更改到达 D,但显然它们不会转到 A 或 B,这很好。
经过一些阅读后,我发现我需要在 C 上设置 log-slave-updates 选项,这样 C 会记录复制到它的更改,然后 D 可以读取这些并进行相同的更新。
我已将选项设置为开,D 正在等待它的主人发送事件,但来自 A 或 B 的更改仍未到达 D。
我有 4 个服务器:A、B、C 和 D。
A 和 B 处于主-主设置中。
C是B的奴隶,D是C的奴隶。
A 或 B 上的更改会到达 D 以外的所有节点。我需要它们到达 D
C 上的更改到达 D,但显然它们不会转到 A 或 B,这很好。
经过一些阅读后,我发现我需要在 C 上设置 log-slave-updates 选项,这样 C 会记录复制到它的更改,然后 D 可以读取这些并进行相同的更新。
我已将选项设置为开,D 正在等待它的主人发送事件,但来自 A 或 B 的更改仍未到达 D。
在服务器 C 上使用log-slave-updates,只有直接写入 B 的更新才会到达服务器 D。
服务器 A 和服务器 B 需要log-slave-updates,否则,它们的更新都不会到达 C。通常,任何同时也是 Slave 的 Master 都必须具有log-slave-updates以便从远程服务器中继 binlog 事件。
我之前讨论过这个
需要在服务器 A 和 B 上重新启动 mysqld 才能使设置生效
让我进一步解释
您的设置
你
INSERT INTO tblname
在 Server A 上运行会发生什么?因为B是A的奴隶
INSERT INTO tblname
INSERT INTO tblname
INSERT INTO tblname
它INSERT INTO tblname
到它的二进制日志中。C 的 IO 线程永远不会看到INSERT INTO tblname
来自服务器 A 的消息。你
INSERT INTO tblname
在服务器 B 上运行会发生什么?由于 A 和 C 是 B 的奴隶,而 D 是 C 的奴隶
INSERT INTO tblname
INSERT INTO tblname
INSERT INTO tblname
它INSERT INTO tblname
INSERT INTO tblname
INSERT INTO tblname
它INSERT INTO tblname
在其二进制日志中记录INSERT INTO tblname
INSERT INTO tblname
INSERT INTO tblname
它根据这个描述,如果你有任何来自 A 的奴隶,这些奴隶永远不会看到
INSERT INTO tblname
来自 B的奴隶。因此,您需要在 A 和 B 以及 C 上进行 log-slave-updates。