我有以下 Mysql 复制模式:
A(主)->B(从/主)->C(从)
- A 写入 binlog
- B读取A的binlog应用relaylog写入自己的binlog
- C 从 B 中读取并应用。
如果复制由于某种原因(A->B)被破坏,我可以复制A的binlog,找到B最后执行的语句对应的位置并重放它。bin/relay 日志中的事务/语句的顺序在所有复制链中是否相同?(复制使用一个线程,所以它可能是相同的顺序。)
更新:我应该问这样的问题:“binlog 中的语句/事务的顺序在所有复制链中是否相同?我们可以在任何主机上重放任何日志并将任何从属设备(c)重新指向主设备(A)”似乎答案是是的”。但尚未发布官方确认或文档(源代码)链接。
UPDATE2:从官方文档到innodb_support_xa:
为 XA 事务中的两阶段提交启用 InnoDB 支持,从而为事务准备带来额外的磁盘刷新。XA 机制在内部使用,对于任何打开二进制日志并接受来自多个线程的数据更改的服务器来说都是必不可少的。如果禁用 innodb_support_xa,事务可以以与实时数据库提交它们的顺序不同的顺序写入二进制日志,当二进制日志在灾难恢复或复制从属上重放时,这可能会产生不同的数据。