基本概念
undo log 有两个基本作用:数据回滚和多版本并发控制(MVCC)
-
数据回滚
(1)当执行一条 insert、update、delete 操作的SQL语句时,会生成一条 undo log,可以称其为重做日志或回滚日志。
(2)记录数据更新之前的样子,当需要回滚时,依据 undo log 恢复。
(3)undo log是逻辑日志,只是将数据库逻辑的恢复到原来的样子(恢复缓冲池中的数据)
(4)如果执行的是insert操作,undo log记录对应的delete操作;
(5)如果执行的是delete操作,undo log记录对应的 insert 操作,数据为整行数据;
(6)如果执行的是update操作,undo log记录 update 操作,数据为更新前的数据 -
MVCC
MySQL的多版本并发控制通过 undo log 版本链来实现
存储管理
undo log 以undo segment的形式存储在共享表空间中。
InnoDB存储引擎有 rollback segment,每个回滚段有 1024 个 undo log segment,在每个undo log segment中进行undo 页的申请。
innodb_undo_directory
:设置rollback segment文件所在路径,默认值 “ . ”,表示当前InnoDB存储引擎