在 MySQL 中,二进制日志是 server 层,主要用来做主从复制和即时点恢复时使用的;而事务日志(Redo Log)是 InnoDB 存储引擎层,用来保证事务安全的。
在数据库运行中,需要保证 Binlog 和 Redo Log 的一致性,如果顺序不一致, 则意味着 Master-Slave 可能不一致。
在开启 Binlog 后,如何保证 Binlog 和 InnoDB redo 日志的一致性呢?MySQL 使用的就是二阶段提交,内部会自动将普通事务当做一个 XA 事务(内部分布式事务)来处理:
Commit 会被自动的分成 Prepare 和 Commit 两个阶段;
Binlog 会被当做事务协调者(Transaction Coordinator),Binlog Event 会被当做协调者日志。
ref https://kaiwu.lagou.com/course/courseInfo.htm?courseId=69#/detail/pc?id=1906
