【MySQL】redo log 和 undo log

redo log 和 undo log

redo log

重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log file),前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。

Redo Log文件不会被直接删除,而是通过一种称为“循环写入”的机制来管理。这意味着Redo Log文件会在达到其大小限制后从头开始覆盖旧的日志记录。

工作流程:

当一个事务进行增删改操作时,会在Buffer pool缓冲池中操作,如果缓存池中数据不存在,则读取磁盘中的数据(进行增删改操作则会出现脏页,要确保脏页成功刷新到磁盘中),将增删改的数据记录到redo log buffer中,redo log buffer记录数据页的物理变化,事务提交以后,会把redo log buffer刷新到到磁盘的redo log file(持久到磁盘)中。一段时间以后,在进行脏页刷新时,发生错误,则使用redo log file 进行数据恢复
在这里插入图片描述

undo log

回滚日志,在insert、update、delete的时候产生,用于记录数据被修改前的信息(保证事务的原子性),作用包含两个:提供回滚MVCC(多版本并发控制)。undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。当执行rolback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
undo log销毁:undo log在事务执行时产生事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC

  • 在当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除
  • 而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时(MVCC)也需要,不会立即被删除。

undo log存储:undo log采用段的方式进行管理和记录, rolback seament 回滚段中,内部包含1024个undo log segment

redo log 和 undo log的区别

  • redo log日志记录的是数据页的物理变化,服务宕机可用来同步数据

  • undo log 不同,它主要记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据,比如我们删除一条数据的时候,就会在undo log日志文件中新增一条delete语句,如果发生回滚就执行逆操作;

  • redo log保证了事务的持久性,undo log保证了事务的原子性

–相关知识
InnoDB引擎架构-更好的了解redo log 和 undo log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值