MySQL之InnoDB中的redo日志类型详解

 更新时间:2025年06月26日 09:28:11   作者:在成都搬砖的鸭鸭  
这篇文章主要介绍了MySQL之InnoDB中的redo日志类型,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、背景

执行我们的sql语句是在Buffer Pool中操作的,因为刷新到磁盘慢的原因可能不会立即同步到磁盘,当系统崩溃时,肯定不能让我们的操作丢失,但是Buffer Pool中的脏页还未同步到磁盘,所以就要把操作Buffer Pool的这一过程更轻量的记录下来并写的磁盘,记录下来的内容就叫redo日志

2、redo日志

【1】格式

redo日志的类型有很多种,每条日志的前面部分都是相同的,其通用结构如下如图所示:

在这里插入图片描述

字段含义如下:

字段含义
typeredo日志类型
space ID表空间ID
page number页号
dataredo日志的具体内容

【2】类型

redo日志类型常见的有如下几种:

字段十进制数含义
MLOG_1BYTE1在页面的某个偏移量处写入1个字节的redo日志类型
MLOG_2BYTE2在页面的某个偏移量处写入2个字节的redo日志类型
MLOG_4BYTE4在页面的某个偏移量处写入4个字节的redo日志类型
MLOG_8BYTE8在页面的某个偏移量处写入8个字节的redo日志类型
MLOG_WRITE_STRING30在页面的某个偏移量处写入一串数据的redo日志类型
MLOG_REC_INSERT9插入一条使用非紧凑行格式记录的redo日志类型
MLOG_COMP_REC_INSERT38插入一条使用紧凑行格式记录的redo日志类型
MLOG_COMP_PAGE_CREATE58创建一个存储紧凑行格式记录的页面的redo日志类型
MLOG_COMP_REC_DELETE42删除一条使用紧凑行格式记录的redo日志类型
MLOG_COMP_LIST_START_DELETE44删除一系列使用紧凑行格式记录的开头redo日志类型
MLOG_COMP_LIST_END_DELETE43删除一系列紧凑行格式记录的结尾redo日志类型
MLOG_ZIP_PAGE_COMPRESS51压缩一个数据页的redo日志类型
MLOG_MULTI_REC_END31代表一组redo日志中的最后一条redo日志类型

接下来就大概讲一下几种redo日志类型结构, MLOG_1BYTE、 MLOG_2BYTE、 MLOG_4BYTE、 MLOG_8BYTE的结果如下:

在这里插入图片描述

MLOG_WRITE_STRING类型结构如下:

在这里插入图片描述

MLOG_COMP_REC_INSERT类型结构如下:

在这里插入图片描述

【3】组

像事务一样,有的场景一组redo日志也具有原子性的特性,所以就有MLOG_MULTI_REC_END类型的redo日志来表示一组redo日志的最后一条,为了区分redo日志到底是单一的还是属于某个组的,就将redo日志结构中的type字段8字节分为前面1字节和后面7字节,前面1字节为1就代表单一的redo日志,否则就为某个组的redo日志,后面7个字节用来表示redo日志类型。

【4】Mini-Transaction

访问一组redo日志的过程叫做Mini-Transaction,一个事务可以包含多个语句,一个语句可以包含多个Mini-Transaction,一个Mini-Transaction包含多个redo日志,这就是它们之间的关系。

3、总结

本文主要简单介绍了一下redo日志有哪几种类型,还有一些其它的类型可以在网上大概查找了解一下。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文整理新手最常犯的SQL高频语法错误和避坑合集

    一文整理新手最常犯的SQL高频语法错误和避坑合集

    本文整理了SQL新手常见的10类语法错误,包括基础语法错误,CRUD操作错误,查询类错误等,每个错误都提供错误示例、正确写法及避坑技巧,希望对大家有所帮助
    2026-05-05
  • 一条SQL语句在MySQL中是如何执行的

    一条SQL语句在MySQL中是如何执行的

    本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的,需要的朋友可以参考一下
    2021-10-10
  • 本机连接虚拟机MYSQL的操作指南

    本机连接虚拟机MYSQL的操作指南

    要让本机(主机)连接到虚拟机上的 MySQL 数据库,你需要确保虚拟机和主机之间的网络连接正常,并且 MySQL 配置允许外部连接,本文给大家介绍了本机连接虚拟机MYSQL的操作指南,需要的朋友可以参考下
    2024-12-12
  • mysql删除重复记录并且只保留一条的实现方法

    mysql删除重复记录并且只保留一条的实现方法

    本文主要介绍了mysql删除重复记录并且只保留一条的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • mysql 月份查询该月有付款的数据

    mysql 月份查询该月有付款的数据

    mysql选择月份查询该月有付款的数据(间隔x月并提前5天付款)
    2010-04-04
  • mysql 获取时间方式

    mysql 获取时间方式

    这篇文章主要介绍了mysql 获取时间方式,获取指定时间,获取当前时间等相关内容,需要的朋友可以参考一下,希望对你有所帮助
    2022-03-03
  • mysql8创建、删除用户以及授权、消权操作详解

    mysql8创建、删除用户以及授权、消权操作详解

    上网找过资料说要进入mysql数据库在进行这些操作,所以下面这篇文章主要给大家介绍了关于mysql8创建、删除用户以及授权、消权操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • MySQL中JOIN算法的具体使用

    MySQL中JOIN算法的具体使用

    JOIN操作是SQL查询中至关重要的部分,它能够将多个表中的数据根据指定的条件组合起来,本文主要介绍了MySQL中JOIN算法的具体使用,感兴趣的可以了解一下
    2024-08-08
  • 一文详解MySQL Join使用原理

    一文详解MySQL Join使用原理

    JOIN是一种非常常见的操作,用于将两个或多个表中的数据合并到一个结果集中。MySQL支持多种JOIN类型,本文通过代码示例详细介绍了Join的使用优化,有需要的小伙伴可以参考阅读
    2023-04-04
  • linux 之centos7搭建mysql5.7.29的详细过程

    linux 之centos7搭建mysql5.7.29的详细过程

    这篇文章主要介绍了linux 之centos7搭建mysql5.7.29的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论