我在 RHEL 中为 2 个节点设置了 Master Master 复制设置。一个服务器充当另一个服务器(也是 Master 和 Slave)的 Master 和 slave 假设 A 服务器和 B 服务器
我在 B 服务器上启用了 log_slave_updates,以便从主服务器(服务器 A)接收的所有语句都应该记录到服务器 B 的二进制日志中。
我期待复制,会失败,因为:
1. Created a Table on Server A.
2. It get replicated to Server B.
现在,从属 B 的二进制日志将转到服务器 A,这应该会中断复制,提示“表已存在”。但它没有
这里的逻辑是什么?
编辑部分:
- 两台服务器上的服务器ID不同
方面#1
请确保 ServerA 和 ServerB 启用了log_slave_updates。
方面#2
此设置不会中断复制,因为每次在二进制日志中记录事务时,也会写入事务的 server_id。
假设 ServerA 的 server_id=10 和 ServerB 的 server_id=20
所以,当你在 ServerA 上运行它时
该事务将包括 server_id 10。当 ServerB 查看其中继日志并看到 server_id 10 时,它将与它自己的 server_id (20) 进行比较。既然没有匹配,那么执行就OK了。
ServerB 在其二进制日志中记录该事务。ServerA 将从其中继日志中选取该事务。当 ServerA 查看其中继日志并看到 server_id 10 时,它会将其与自己的 server_id (10) 进行比较。由于匹配,它拒绝执行。
我之前在之前的回答中讨论过这个
Mar 27, 2012
: MySQL 中的主-主复制Oct 15, 2012
:更改 master 上的 server_id 会中断复制吗?