今天和大家分享一下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

Undo log日志详解相关推荐

  1. MySQL - undo log 图文详解

    一 前言 undo log 是 innodb 实现,总的来说提供两个作用:回滚和多版本控制(MVCC).是事务特性的重要组成部分,在数据发生更新操作时候(INSERT.DELETE.UPDATE)时会 ...

  2. mysql slow log损坏_06 : mysql 的 binlog 日志 和slow慢日志 详解

    mysql 的 binlog 日志 和slow慢日志 详解 mysql一般常用的日志有三种: 1:error错误日志 2: binlog日志 3:slow日志 下面将详细解释这三种日志: 1.错误日志 ...

  3. MySQL管理之日志详解

    MySQL日志详解 错误日志 MySQL的错误信息是在data目录下的 错误日志本身所定义的内容本身是可以定义的 编辑配置文件,定义错误日志: log-error=/path/to/xx.err   ...

  4. JVM GC 日志详解

    本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) ...

  5. JVM从入门到精通(十一): CMS日志详解,G1日志详解,JVM常见参数总结;补充纤程知识

    CMS 日志格式分析 使用CMS:添加参数UserConcMarkSweepGC(CMS+ParNew) CMS常用参数 -XX:+UseConcMarkSweepGC -XX:ParallelCMS ...

  6. MySQL日志文件之错误日志和慢查询日志详解

    今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...

  7. SpringBoot2.1.5(16)--- Spring Boot的日志详解

    SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...

  8. GC日志详解[乐乐独记]

    GC日志详解[乐乐独记] 1.静态分析GC日志 1.1.Parallel GC日志 1.2.CMS GC日志 1.3.G1 GC日志 2.使用工具分析GC日志 10.辅助知识 10.1.元空间不足也会 ...

  9. git log 命令详解

    git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...

  10. Hadoop日志详解

    文章目录 1 Hadoop日志详解 2 Hadoop 系统服务输出的日志 2.1 修改Hadoop系统服务日志目录(包括NameNode.secondarynamenode.datanode.reso ...

最新文章

  1. 液体冷却将在数据中心重现
  2. vue 自定义组件 v-model双向绑定、 父子组件同步通信
  3. 零基础考信息系统项目管理师要怎么准备?
  4. 《C++标准程序库》笔记之二
  5. 为什么 0.1 + 0.2 = 0.300000004
  6. oracle 自带table,Oracle中table函数的使用详解
  7. QML 读取本地文件内容
  8. J2EE框架(四)核心设计模式
  9. openwrt1907 mt7621配置DDR自适应
  10. opnet中SOCKET接口开发
  11. TOAD 调试存储过程的方法
  12. HearthBuddy 调试肯瑞托法师寒冰屏障的配合
  13. ppt讲解中的过渡_PPT「过渡页」怎么设计才好看?
  14. js获取免费天气api
  15. HLS流媒体服务器对性能要求,搭建hls直播流媒体服务器有什么要求?
  16. 《英文科技论文写作与学术报告》网课第一章作业答案
  17. 请编写一个正方体类,类的私有数据成员是边长,要求用公有成员函数实现以下功能:1. 由键盘分别输入正方体的边长2. 计算并输出正方体的体积
  18. 3脚送话器内部电路图_话机送、受话器的修理与电路检修
  19. 《cell》最新动态2021年4月
  20. 语音识别、手写输入 QQ2011正式版全体验

热门文章

  1. 《算法刷题LeetCode(中文版)》
  2. 自回归模型 - PixelCNN
  3. axure流程图模式_Axure原型设计:Axure原型加流程图功能的高效结合
  4. Web开发后端框架比较
  5. Windows快捷命令
  6. 统计自然语言处理(第2版)目录
  7. 微信分享wx.config配置时遇到invalid signature错误的解决办法
  8. Navicat for MySQL8.2注册码
  9. weblogic错误页面
  10. 二阶系统阶跃响应实验_二阶系统阶跃响应实验心得体会