文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Undo log日志详解

2023-08-21 22:35

关注

今天和大家分享一下Undo log日志的知识点

1.什么是undo log?

撤销日志,在数据库事务开始之前,MYSQL会去记录更新前的数据到undo log文件中。如果事务回滚或者数据库崩溃时,可以利用undo log日志中记录的日志信息进行回退。同时也可以提供多版本并发控制下的读(MVCC)。(具体的MVCC实现机制详解看这篇博客

2.undo log生命周期

undo log产生: 在事务开始之前生成
undo log销毁: 当事务提交之后,undo log并不能立马被删除,而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。
注意: undo log也会生产redo log,undo log也要实现持久性保护。

3. uodo log日志的作用

首先简单说一下undolog 和redo log的区别
undo log是逻辑日志,实现事务的原子性
  undo log记录的是事务[开始前]的数据状态,记录的是更新之前的值
  undo log实现事务的原子性(提供回滚)
redo log是物理日志,实现事务的持久性
  redo log记录的是事务[完成后]的数据状态,记录的是更新之后的值
  redo log实现事务的持久性(保证数据的完整性)

1.undo log日志可以实现事务的回滚操作
我们在进行数据更新操作的时候,不仅会记录redo log,还会记录undo log,如果因为某些原因导致事务回滚,那么这个时候MySQL就要执行回滚(rollback)操作,利用undo log将数据恢复到事务开始之前的状态。

如我们执行下面一条删除语句:

delete from book where id = 1;

那么此时undo log会生成一条与之相反的insert 语句【反向操作的语句】,在需要进行事务回滚的时候,直接执行该条sql,可以将数据完整还原到修改前的数据,从而达到事务回滚的目的。

再比如我们执行一条update语句:

update book set name = "三国" where id = 1;   ---修改之前name=西游记

此时undo log会记录一条相反的update语句,如下:

update book set name = "西游记" where id = 1;

如果这个修改出现异常,可以使用undo log日志来实现回滚操作,以保证事务的一致性。

2.undo log实现多版本并发控制 MVCC
具体的MVCC实现机制详解看这篇博客

4. uodo log的工作原理

在这里插入图片描述

如上图所示:
当事务A进行一个update操作,将id=1修改成id=2。首先会修改buffer pool中的缓存数据,同时会将旧数据备份到undo log buffer中,记录的是还原操作的sql语句。此时如果事务B要查询修改的数据,但是事务A还没有提交,那么事务B就会从undo log buffer中,查询到事务A修改之前的数据,也就是id=1。此时undo log buffer会将数据持久化到undo log日志中(落盘操作)。undo日志持久化之后,才会将数据真正写入磁盘中,也就是写入ibd的文件中。最后才会执行事务的提交。

5. uodo log的存储机制

在这里插入图片描述
具体参数存储形式如上图所示

6. uodo log的配置参数

innodb_max_undo_log_size: undo日志文件的最大值,默认1GB,初始化大小10M
innodb_undo_log_truncate: 标识是否开启自动收缩undo log表空间的操作
innodb_undo_tablespaces: 设置独立表空间的个数,默认为0,标识不开启独立表空间,undo日志保存在ibdata1中
innodb_undo_directory: undo日志存储的目录位置
innodb_undo_logs: 回滚的个数 默认128

来源地址:https://blog.csdn.net/LT11hka/article/details/125870981

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯