跳转至

MySQL 事务底层实现

一、ACID 怎么实现

特性 实现
原子性 undo log
持久性 redo log
隔离性 lock + MVCC
一致性 上面三者共同保证

二、redo log(持久性)

  • WAL(Write-Ahead Logging):先写日志,再写磁盘。
  • 修改时先写 redo log,Buffer Pool 异步刷盘。
  • Crash 后用 redo log 恢复。

三、undo log(原子性)

  • 记录修改前的版本。
  • 回滚时用 undo log。
  • MVCC 也用 undo log 实现。

四、锁(隔离性)

  • 读锁(共享)。
  • 写锁(排他)。
  • 不同隔离级别锁不同。

五、两阶段锁

  • 执行阶段加锁。
  • commit 时统一释放。

六、binlog

Server 层日志,用于主从复制。

redo log vs binlog

redo log binlog
InnoDB Server
内容 物理页 逻辑 SQL
用途 恢复 复制
写入 循环写 追加写

两阶段提交保证 redo log 和 binlog 一致。

一句话

redo log 保持久,undo log 保原子,锁 + MVCC 保隔离。