type
Post
status
Published
date
Oct 12, 2026
slug
acid
summary
tags
技术探索
category
手写
icon
password
InnoDB 通过 Undo Log、Redo Log、MVCC 和锁机制实现事务的 ACID。
首先,原子性主要通过 Undo Log 实现,事务失败时可以撤销已执行的修改。
一致性由其他三个特性、数据库约束以及业务逻辑共同保证。
隔离性主要通过 MVCC 和锁实现,MVCC 通过历史版本和 Read View 支持快照读,锁机制处理并发写入和加锁读取。
最后,持久性通过 Redo Log 和 WAL 实现,事务提交时先持久化日志,即使数据库崩溃,也可以通过 Redo Log 恢复数据。
Undo Log、Redo Log、Binlog是什么
日志 | 是什么 | 主要作用 |
Undo Log(回滚日志) | 记录撤销数据修改所需的信息 | 事务回滚、MVCC |
Redo Log(重做日志) | 记录 InnoDB 数据页的物理修改信息 | 崩溃恢复,保证持久性 |
Binlog(二进制日志) | 记录数据库的数据变更事件 | 主从复制、数据恢复 |
什么是二阶段提交?
MySQL 使用两阶段提交协调 Redo Log 和 Binlog,先让 Redo Log 进入 Prepare 状态,再写入 Binlog,最后提交 Redo Log,保证崩溃恢复时两份日志的事务状态一致。
WAL(Write-Ahead Logging,预写日志):修改数据时,先写日志,再将数据页写入磁盘,确保数据库崩溃后能够通过日志恢复数据。
数据库崩溃是什么意思?
数据库崩溃就是 MySQL 因异常突然停止运行,可能导致内存中尚未落盘的数据丢失,因此 InnoDB 使用 Redo Log 在重启后恢复已提交事务的数据。
单MySQL也需要记录Binlog吗?
单机 MySQL 不一定需要 Binlog,因为 Redo Log 已经能够保证事务的崩溃持久性;但 Binlog 支持主从复制和指定时间点恢复,所以生产环境通常建议开启。
分享
