一、 undo 日志简介
undo log叫做回滚日志或撤销日志,在事务执行变更操作之前需要先将相反的操作写入undo log,通过它可以让事务回滚操作,undo log也是实现多版本控制(MVCC)的基础。
redo log保证了事务的持久性,而undo log保证了事务的原子性和一致性。
undo日志是逻辑日志,undo日志再InnoDB使用回滚段 rollback segment,每个回滚段记录了1024哥undo log segment
如,用户执行了一个INSERT 10W条记录的事务,这个事务会导致表空间增大,执行ROLLBACK时,会将插入的事务进行回滚,但是表空间并不会缩小。当InnoDB存储引擎回滚时,它实际做的是与之前相反的操作,对于每一个delete ,回滚,InnoDB会执行一个INSERT,对于每一个UPDATE,InnoDB存储引擎会执行一个相反的UPDATE
二、undo日志作用
回滚数据: undo log记录了每个操作的逆操作,可以逻辑恢复数据(注意:类似git 操作,不是物理上的恢复,既数据结构和页可能变化了);
MVCC: 在InnoDB中MVCC的实现是通过undo log来完成。当用户读取一行记录时,若该记录已经被其他事务占用,当前事务可以通过undo log读取之前的行版本信息,以此实现非锁定读取。