NiceOffer

八股文解析

MySQL InnoDB 的 redo log 和 undo log 有什么区别?

MySQLInnoDB八股文数据库

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

记录数据修改前的旧版本,用于:

  1. 事务回滚
  2. MVCC 一致性读(Read View + undo 链)

常见追问

追问要点
redo 和 binlog 区别?redo InnoDB 层崩溃恢复;binlog Server 层主从/归档
两阶段提交?prepare → binlog → commit,保证 redo/binlog 一致