Mysql--基础知识点--79.1--双主架构如何避免回环复制
1 避免回环过程
在MySQL双主架构中,GTID(全局事务标识符)通过以下流程避免数据回环:
1 事务提交与GTID生成
- 在Master1节点,事务提交时生成一个全局唯一的GTID(如3E11FA47-71CA-11E1-9E33-C80AA9429562:23),并记录到binlog中。
2 日志传输到Master2
- Master1的log dump Thread将包含GTID的binlog日志发送到Master2。
3 Master2记录Relay Log
- Master2的I/O Thread接收binlog日志,并将其写入本地的Relay Log。
4 Master2重放事务
- Master2的SQL Thread读取Relay Log中的事务,并尝试重放。
5 Master2检查GTID并忽略
- 关键步骤:在重放前,Master2检查该事务的GTID是否已存在于其gtid_executed集合(已应用事务的GTID列表)中:
- 存在:跳过该事务(因为是Master1已提交的事务)。
- 不存在:执行事务,并将GTID添加到gtid_executed集合。
6 Master2生成新的Binlog
- 如果事务在Master2上执行,Master2会生成一个新的binlog日志,其中包含相同的GTID。
7 日志传输回Master1
- Master2的log dump Thread将新的binlog日志(包含GTID)发送回Master1。
8 Master1记录Relay Log
- Master1的I/O Thread接收binlog日志,并将其写入本地的Relay Log。
9 Master1重放事务
- Master1的SQL Thread读取Relay Log中的事务,并尝试重放。
10 Master1检查GTID并忽略
- Master1检查其GTID是否已存在于gtid_executed集合中:
存在:跳过该事务(因为是Master1自己生成的GTID)。
- 不存在:执行事务(理论上不会发生,因为GTID是全局唯一的)。
补充:v5.6及以后的版本是通过gtid避免回环,v5.6以前的版本是通过server_id[不同的节点有不同的server_id]避免回环
2 总结
2.1 为什么GTID能避免回环?
- 全局唯一性:每个GTID在集群中唯一,确保事务不会被重复应用。
- 幂等性检查:通过gtid_executed集合,节点能自动检测并跳过已应用的事务。