MySQL 归档神器 —— binlog!
binlog
MySQL 基础架构分为 Server 层和存储引擎层两部分。
- Server 层的日志是 binlog,记录 SQL 语句的原始逻辑,用来归档和复制。
- InnoDB 引擎的日志是 redo log,记录数据页的修改,用来实现 crash-safe 能力。
两阶段提交
为了让两份日志之间的逻辑一致,
InnoDB 使用了两阶段提交机制,将 redo log 的写入拆成 prepare 和 commit 两步。
- 先写入 redo log,处于 prepare 阶段
- 再写入 binlog
- 最后,提交事务,处于 commit 阶段
![]()
redo log 和 binlog 有共同的数据字段 XID。崩溃恢复时,会按顺序扫描 redo log,
- 如果里面的事务有 commit,就直接提交。
- 如果只有 prepare,就拿 XID 去看对应事务的 binlog 是否完整。如果是,就直接提交,否则回滚。
与 redo log 区别
- redo log 是 InnoDB 引擎特有的,而 binlog 是 Server 层实现的
- redo log 是物理日志,记录数据页的修改,用来实现 crash-safe 能力。
而 binlog 是逻辑日志,记录 SQL 语句的原始逻辑,用来归档和复制。 - redo log 是固定大小的,而 binlog 是追加写入的,不会覆盖以前的日志。


浙公网安备 33010602011771号