概念描述
当MySQL搭建双主模式的复制架构,节点 A 上更新了一条语句,然后再把生成的 binlog 发给节点 B,节点 B 执行完这条更新语句后也会生成 binlog。
- 在B节点生成binlog的同时会不会将数据同步回给A节点,A节点如何判定数据是否已经被应用。
- 如何解决两个节点循环复制的问题
解决方案:
当主节点A发现从节点B同步过来的binlog日志信息时会判断server_id的值,如果当server_id与自己的相同时则不会进行日志的应用将日志丢弃,如果发现与自己的serve_id不同时则会应用此部分信息。这样就解决循环复制产生的问题。
测试验证
实验环境:
mysql两台实例版本8.0,双主架构A,B节点互为主从
A节点ip:172.16.243.129
B节点ip:172.16.243.130
测试流程:
1.对A节点进行数据的插入修改,A节点binlog进行写入
这里binlog中记录了A节点的server_id为 243129.我们在登陆B节点查看B节点生成的binlog日志
这里B节点也生成了相同的数据,但是B节点的binlog中日志对应的server_id为A节点的server_id
3.同样我们在B节点进行插入数据
这里在B节点插入数据后生成的server_id则为B节点的server_id为243130
4.在次查看A节点的binlog
这里发现B节点插入的数据已经同步到了A节点,但是server_id为B节点的server_id
知识总结
通过上述实验分析得出结论:
1.在搭建主从关系时,两个节点的server_id必须不同(基本设置)。
2.如果A节点在进行数据修改生成binlog的同时同步到B节点,B节点的binlog内生成的信息中也是A节点的server_id信息。
3.所以当双主模式下,当主节点A发现从节点B同步过来的binlog日志信息时会判断server_id的值,如果当server_id与自己的相同时则不会进行日志的应用将日志丢弃,如果发现与自己的serve_id不同时则会应用此部分信息。这样就解决循环复制产生的问题。