八股文解析
MySQL InnoDB 的 redo log 和 undo log 有什么区别?
redo log vs undo log
一句话结论
- redo log:崩溃恢复用,保证已提交事务的持久性(WAL 机制)
- undo log:回滚与 MVCC 用,保证事务原子性和一致性读
面试标准答法
redo log
InnoDB 采用 WAL(Write-Ahead Logging):页修改先写 redo,刷盘后再异步刷数据页。崩溃重启时通过 redo 重放未落盘修改。
关键点:
- 循环写、固定大小(ib_logfile)
innodb_flush_log_at_trx_commit控制刷盘策略
undo log
记录数据修改前的旧版本,用于:
- 事务回滚
- MVCC 一致性读(Read View + undo 链)
常见追问
| 追问 | 要点 |
|---|---|
| redo 和 binlog 区别? | redo InnoDB 层崩溃恢复;binlog Server 层主从/归档 |
| 两阶段提交? | prepare → binlog → commit,保证 redo/binlog 一致 |