MySQL 事务日志
重做日志(Redo log)
重做日志(Redo log),也叫做前滚日志,存放在如下位置,轮询使用,记录着内存中数据页的变化,在事务 ACID 过程中,主要实现的是 D(Durability)的作用,对于 A(Atomicity)C(Consistency) 也有相应的作用
# Redo Log 日志文件的位置
# ib_logfile0 与 ib_logfile1 轮询使用,默认 48MB
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 50331648 Aug 15 06:34 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Mar 6 2017 ib_logfile1
Redo Log 日志中,记录着内存中的数据页的变化过程(不是 SQL 语句),以及数据页当前的 LSN(Log Sequence Number)日志序列号
Redo Log Buffer:记录数据页的变化过程的内存缓冲区,数据页当前的 LSN(Log Sequence Number)日志序列号
Data Page Buffer Pool:当执行 DML 时,MySQL 将数据(至少一页 16K)取到该数据缓冲内存中,在当前内存中修改该数据,并将变化的过程存储到 Redo Buffer 中,修改完数据不会马上存储回硬盘,因为每一条 DML 语句都至少调取一页数据(16K),存储时也至少存储一页数据(16K)。若执行大量的 DML 会进行大量的 IO 操作

LSN(Log Sequence Number)日志序列号:日志序列号,占用 8 字节,主要用于发生 Crash 时对数据进行 Recovery,LSN 是一个一直递增的整型数字,表示事务写入到日志的字节总量
CSR(Crash Safety-Recovery )故障自动恢复:出现宕机,即使磁盘中的zzzwqh.ibd文件中没有存储数据,根据 redo log 也可以恢复数据。
CSR(Crash Safety-Recovery)故障自动恢复过程:重启数据库时,MySQL 将 .ibd 文件取到 Data Buffer Page Pool 内存中,将 redo log 取到 Redo Buffer 内存中,对比两者的 LSN(Log Sequence Number)日志序列号,将变化后的数据真正落入到 .ibd 文件中,所以很多时候重启数据库会很慢
WAL(Write Ahead Log)日志优先写:Redo log 要比数据要优先写入磁盘中,因为 IO 速率更快
举例描述流程
# 修改
1)首先将表中 id=1 的行所在数据页(16K)加载到内存中 Data Page Buffer Pool
2)MySQL实例在内存中将 id=1 的数据改成 id=2
3)id=1 变成 id=2 的变化过程会记录到,redo 内存区域,也就是 Redo Buffer Pool
4)当敲下 commit 命令的瞬间,MySQL会将 Redo Buffer Pool 写入磁盘区域 Redo Log
5)当写入成功之后,commit 返回 ok,commit 一般很快,因为需要写的 Log 数据很少(相对于表数据)
# 查询
1.首先将表中 id=1 的行所在数据页加载到内存中 Data Page Buffer Pool
2.将 Redo Log 中 id=1 变成 id=2 的变化过程取加载到 Redo Buffer Pool
3.通过 Data Page Buffer Pool 和 Redo Buffer Pool 得到一个结果
回滚日志(Undo Log)
回滚日志(Undo Log)存储了事务工作过程中的回滚信息(与 Redo Log 记录的变化过程 相反的操作),在事务ACID 过程中,实现的是 A(Atomicity)的作用,C(Consistency)与 I(Isolation)的特性也和 Undo log 有关
# Undo Log 日志文件的位置,默认存储在共享表空间
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata1
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata2
Undo Log 日志中,记录是否执行 Commit,以 Redo Log 事务变化过程的反过程
在 Redo Log 中,记录着 Commit 提交过的事务,但也记录着长时间未 Commit 但写入到 Redo Log 中的事务(会有与 Commit 不同的特殊标记)
即使 Redo Log 记录了长时间未 Commit 但写入的事务,也不会返回修改后的结果,因为返回过程中,需要去 Undo Log 中确认这个事务是否 Commit,再返回结果

MySQL 事务日志的更多相关文章
- 详细分析MySQL事务日志(redo log和undo log)
innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...
- 【MySQL (六) | 详细分析MySQL事务日志redo log】
Reference: https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html 引言 为了最大程度避免数据写入时 IO ...
- 详细分析MySQL事务日志(redo log和undo log) 表明了为何mysql不会丢数据
innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...
- Mysql 事务日志(Ib_logfile)
mysql的innodb中事务日志ib_logfile(0/1) 概念:事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开启 ...
- 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
还记得刚上研究生的时候,导师常挂在嘴边的一句话,"科研的基础不过就是数据而已."如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学. 倘若剥开研究领域的外 ...
- 熬夜肝出5大点,18张图带你彻底弄懂MySQL事务日志
在当今社会,充斥着大量的数据.从众多APP上的账户资料到银行信用体系等个人档案,都离不开对大量数据的组织.存储和管理.而这,便是数据库存在的目的和价值.目前数据库的类型主要分为两种,一种是关系型数据库 ...
- 详细分析MySQL事务日志(undo log)
2.undo log 2.1 基本概念 undo log有两个作用:提供回滚和多个行版本控制(MVCC). 在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败 ...
- MySQL事务内幕与ACID
MySQL的事务实现严格遵循ACID特性,即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability).为了避免一上来就陷入对ACID ...
- mysql的innodb中事务日志ib_logfile
mysql的innodb中事务日志ib_logfile事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开启几组日志来服务于当 ...
随机推荐
- 【Oracle】查询锁的相关SQL
--查看有锁的进程 select t2.username,t2.sid,t2.serial#,t2.logon_time,t2.state from v$locked_object t1,v$sess ...
- 【老孟Flutter】如何提高Flutter应用程序的性能
首先 Flutter 是一个非常高性能的框架,因此大多时候不需要开发者做出特殊的处理,只需要避免常见的性能问题即可获得高性能的应用程序. 重建最小化原则 在调用 setState() 方法重建组件时, ...
- Cookie&Session&Jsp总结
知识点梳理 Cookie&Session&Jsp 1 会话技术 1.1 会话管理概述 1.1.1 会话技术介绍 会话:浏览器和服务器之间的多次请求和响应 (一次对话) 为了实现一些功能 ...
- JD6621快速充电协议芯片,带有PPS 控制器的USB-PD3.0
描述 JD6621是高度集成的USB供电(PD)控制器,支持USB PD 3.0 ,该USB PD 3.0 具有针对USBType-C下游接口(源)设计的可编程电源(PPS)规范.它监视CC引脚以检测 ...
- DC-DC变换器,24v转5v稳压芯片,3A输出电流
在24V输入中,比较合适的LDO可以选择:PW6206,输出电压3V,3.3V,5V 输入电压最高40V,功耗也低4uA左右,采用SOT23-3封装. PW6206系列是一个高精度,高输入电压低静态电 ...
- Git安装/VScode+Git+Github
Git安装/VScode+Git+Github 1. 相关简介 git 版本控制工具,支持该工具的网站有Github.BitBucket.Gitorious.国内的OS China仓库.Csdn仓库等 ...
- drf认证、节流、权限、版本
Django rest framework 认证: 作用:验证用户是否登录 在视图类中写上authentication_classes = [ ],这是一个列表 需要实现 authenticate() ...
- JS实现鼠标移入DIV随机变换颜色
今天分享一个在 JavaScript中,实现一个鼠标移入可以随机变换颜色,本质就是js的随机数运用. 代码如下: <!DOCTYPE html> <html> <head ...
- java虚拟机入门(五)- 常见垃圾回收器及jvm实现
上节讲完了垃圾回收的基础,包括java的垃圾是什么,如何寻找以及常用的垃圾回收算法,那么那么多的理论知识讲完了,具体是什么样的东西在做着回收垃圾的事情呢?我们接下来就好好聊聊jvm中常用的垃圾回收器. ...
- IGXE搬砖项目
主要的赚钱方式和倒爷其实是差不多的,自动检测igxe平台上价格与buff相差8.5%以上的饰品,按照历史价格进行一定的过滤,防止翻车,然后自动购买. 2019年经历了十几次的改进以对抗同行的脚本,到1 ...