Java面试八股之MySQL的redo log和undo log

  1. 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站:

相关推荐
杨江2 小时前
ThingsBoard安装测试
服务器·数据库
mit6.8242 小时前
[Redis#4] string | 常用命令 | + mysql use:cache | session
数据库·redis·后端·缓存
Beekeeper&&P...3 小时前
map和redis关系
数据库·redis·缓存
jianqimingtian3 小时前
如何使用 Matlab 制作 GrabCAD 体素打印切片
数据结构·数据库
真真假假々3 小时前
MySQL和ADSDB
数据库·mysql
秦老师Q3 小时前
MySQL第二章 sql约束与sql数据类型
数据库·sql·mysql
不是二师兄的八戒3 小时前
mysql in查询大数据量业务无法避免情境下优化
数据库·mysql
----云烟----3 小时前
Qt获取文件夹下的文件个数(过滤和不过滤的区别)
数据库·qt
Dotrust东信创智3 小时前
浅谈丨功能安全测试,汽车的守护者
运维·服务器·数据库
清水白石0085 小时前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug