- MySQL的redo log和undo log
在MySQL的InnoDB存储引擎中,redo log和undo log是两种重要的日志,它们各自服务于不同的目的,对数据库的事务处理和恢复机制至关重要。
Redo Log(重做日志)
功能
redo log的主要作用是确保事务的持久性(Durability),即使在系统崩溃的情况下也能恢复数据的一致性。
它记录了所有修改数据页的物理变化,这些变化在事务提交后会被记录到redo log中。
工作原理
当一个事务中的数据页发生变化时,InnoDB不仅会修改内存中的数据,还会在redo log中记录这个修改动作。
当事务提交时,相关联的redo log会被标记为已提交,这样即使在之后的系统崩溃中,通过重放redo log,InnoDB能够确保所有已提交的事务所做的更改都能被应用到磁盘上的数据页中。
重要性
redo log是恢复策略的一部分,它确保了即使在断电或系统崩溃后,数据库仍能恢复到一个一致的状态。
由于redo log的存在,InnoDB能够在重启后重做所有已提交的事务,从而保证数据的完整性和持久性。
Undo Log(撤销日志)
功能
undo log主要用于支持事务的回滚(Rollback)和实现多版本并发控制(MVCC)。
它记录了事务修改前的数据值,使得事务在回滚时能够恢复到修改前的状态。
工作原理
当一个事务开始时,任何对数据页的修改都会生成一条undo log记录,这条记录保存了修改前的数据值。
如果事务回滚,InnoDB会使用undo log中的信息将数据恢复到事务开始时的状态。
对于MVCC,undo log使得多个事务可以同时读取同一行的不同版本,而不会相互干扰。
重要性
undo log保证了事务的原子性和一致性,使数据库能够在事务失败或回滚时回到一个一致的状态。
它也是MVCC的关键组成部分,允许并发读取而不阻塞事务的写操作。
总结来说,redo log和undo log分别负责持久性和一致性两个方面,它们共同作用于InnoDB的事务处理和恢复机制,确保了数据库的ACID属性。redo log关注数据的持久性,而undo log则关注数据的可回滚性和多版本并发控制。
如果大家需要视频版本的讲解,欢迎关注我的B站: