MySql中的undo.log

undo.log是MySQL的回滚日志,用于保证事务的原子性,记录了事务对数据的修改前的状态。内容包括回滚段、两种基本格式(insert仅记录操作值,update/delete记录旧值及回滚指针)、回滚时机和Mysql5.7+的参数设定。Purge线程负责清理不再需要的undo.log记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:关于Mysql底层比较难理解的三种日志,虽然外面面试问的较少,问到的也是一些大厂,但是学习不是为了蒙混面试官的,是为了自己的,所以我相信,熟读事务支持的三种日志,会给我们设计分布式事务或者更加复杂的业务场景带来很大帮助。

(1)是什么?常见场景和用法?

undo.log 也称之为回滚日志,主要用于做事务的数据回滚。更直白的说法,就是做数据回滚恢复的,保证事务的原子性,一个操作失败,全部操作回滚。
undo.log属于逻辑日志,逻辑日志的意思就是它属于一种理论逻辑,就是按道理说当前行在“某些条件下”~‘应该’是怎样的,而不一定物理存储就一定是那样的,与之对应的是redo.log物理日志。再简单点说,逻辑就像产品经理的天荒夜谈,物理就是我们程序员要变成的落地实现。所以回滚日志的性质,就决定了它必然是逻辑日志。
常见的场景就是我们加了事务控制的时候,针对多个不同的事务ID,看到的数据值都是不一样的(不同隔离级别稍有差异),原因就是事务ID不一样,对应的视图副本read view也不一样,视图副本不保存数据,但是会保存新老事务版本ID,通过老的版本ID,就能在undo.log中找到对应的旧数据,这是在MVCC可见性中的应用。
同时三大隐藏列中的回滚指针,也会指向undo.log中的旧数据,方便回滚,这就是最常见的数据回滚中的应用。

(2)undo.log的两种基本格式?
### 回答1: MySQL中的undolog和redolog是两种不同的日志文件。 undolog是用于事务回滚的日志文件,它记录了事务执行前的数据状态,当事务回滚时,可以根据这些记录将数据恢复到事务执行前的状态。 redolog是用于崩溃恢复和数据恢复的日志文件,它记录了MySQL数据库中所有的修改操作,当MySQL崩溃或者出现其他异常情况时,可以根据redolog中的记录将数据恢复到最近一次提交的状态。 ### 回答2: MySQL中的undolog和redolog是两个重要的日志文件,用于维护数据的一致性和恢复。 undolog(回滚日志)是用于回滚操作的日志,它记录了事务对数据库的修改操作,在回滚时可以利用undolog将数据恢复到事务开始前的状态。undolog文件是在InnoDB存储引擎中使用的,它采用了"write ahead logging"(先写日志,再写磁盘)的机制,保证事务的原子性和一致性。 redolog(重做日志)是用于恢复操作的日志,它记录了事务对数据库的修改操作,在数据库崩溃或意外断电等情况下,通过读取redolog可以将数据库恢复到最后一次提交事务的状态。redolog文件是在InnoDB存储引擎中使用的,默认情况下是循环写入,即满了后会从头开始覆盖,以保证磁盘空间的有效利用。 undolog和redolog的作用不同,undolog主要用于事务回滚,redolog用于恢复数据库。在事务进行过程中,先将数据的修改操作写入undolog,然后再写入redolog,只有当redolog写入成功后,事务才会提交完成。这样可以保证在数据库崩溃后,借助redolog进行恢复操作,将未写入磁盘的undolog日志进行恢复。 总结来说,undolog是用于回滚操作,保证了事务的原子性和一致性;redolog是用于恢复操作,保证了数据库的持久性。两者共同作用,保证了MySQL数据库的安全可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值