回滚日志 - Undo Log
- 只适用于 InnoDB
- 实现事务回滚, 或者崩溃时回滚(撤销)事务所作的修改, 保障了原子性
- Undo Log + Read View 实现 MVCC
- 会写到 Buffer Pool 中的 “undo页”, 通过 Redo Log 持久化
版本链
一条记录的每一次更新操作产生的 undo log 格式都有一个 roll_pointer 指针和一个 trx_id 事务id:
- 通过 trx_id 可以知道该记录是被哪个事务修改的;
- 通过 roll_pointer 指针可以将这些 undo log 串成一个链表,这个链表就被称为版本链;
- 版本链头结点为记录数据, 在聚簇索引中; 其他节点为 undo log

Redo Log vs Undo Log
都只适用于 InnoDB
Redo Log 记录事务修改后的数据状态, 记录的是更新后的值, 主要用于事务崩溃回复, 保证事务持久性
Undo Log 记录事务修改前的数据状态, 记录的是更新前的值, 主要用于事务回滚, 保证事务的原子性
事务提交失败/事务执行错误, MySQL重启后通过 Undo Log 回滚事务
事务提交后发生崩溃(宕机崩溃), 重启后通过 Redo Log 恢复事务
Link to original
