WAL(Write-Ahead Logging,预写日志)是数据库中保证数据持久性和崩溃恢复的核心机制。其基本思想是:任何数据修改先写日志,再改内存/磁盘页,这样即使系统崩溃,也能通过日志把未完成或已提交但未落盘的数据恢复出来。
下面按「原理 → 恢复流程 → 关键细节 → 示例」系统说明。
先写日志,后写数据
崩溃时内存丢失,但日志还在
数据库重启后,恢复通常分三个阶段:
✅ Redo 保证:所有已提交数据一定存在
✅ Undo 保证:未完成事务像没发生过
UPDATE account SET balance=100 WHERE id=1;
COMMIT;
执行过程:
T1: update id=1, old=0, new=100
T1: commit
恢复时:
| 数据库 | WAL 名称 | 特点 |
|---|---|---|
| PostgreSQL | WAL | 物理+逻辑日志 |
| MySQL(InnoDB) | Redo + Undo Log | 双日志 |
| SQLite | WAL 模式 | 单文件 |
| RocksDB | WAL | LSM-tree |
| etcd | WAL | Raft 日志 |
WAL 恢复数据的本质:
用“先写日志”的顺序,在崩溃后通过 Redo 重做已提交操作 + Undo 撤销未提交操作,把数据库恢复到一致状态。
如果你愿意,我可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。