当前位置: 代码网 > it编程>数据库>Mysql > MySQL之InnoDB中的redo日志类型详解

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

2025年06月26日 Mysql 我要评论
1、背景执行我们的sql语句是在buffer pool中操作的,因为刷新到磁盘慢的原因可能不会立即同步到磁盘,当系统崩溃时,肯定不能让我们的操作丢失,但是buffer pool中的脏页还未同步到磁盘,

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日志有哪几种类型,还有一些其它的类型可以在网上大概查找了解一下。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • mysql中的数据目录用法及说明

    mysql中的数据目录用法及说明

    1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的数据都是存储在这个目录中,可以大概了解一下这个目录下是怎么存储数... [阅读全文]
  • MySQL之InnoDB存储页的独立表空间解读

    1、背景我们往一张表里插入的行数据是存储在页上的,一张页的大小为16kb,数据量大的时候一张页不可能存储完一张表里的所有数据,所以需要多张页来进行存储,这多张页所在的存储空间就叫表…

    2025年06月26日 数据库
  • Mysql 多表联合更新的项目实践

    Mysql 多表联合更新的项目实践

    mysql 可以基于多表查询更新数据。对于多表的 update 操作需要慎重,建议在更新前,先使用 select 语句查询验证更新的数据与自己期望的是否一致。下... [阅读全文]
  • MySQL中的InnoDB单表访问过程

    MySQL中的InnoDB单表访问过程

    1、背景mysql通过查询条件查询到结果的过程就叫访问方法,一条查询语句的访问方法有很多种,接下来我们就来讲一下各种访问方法。2、环境创建表:mysql>... [阅读全文]
  • MySQL 中 ROW_NUMBER() 函数最佳实践

    MySQL 中 ROW_NUMBER() 函数最佳实践

    mysql 中row_number()函数详解row_number()是 sql 窗口函数中的一种,用于为查询结果集中的每一行分配一个​​唯一的连续序号​​。与... [阅读全文]
  • MySQL中的表连接原理分析

    MySQL中的表连接原理分析

    1、背景在进行sql查询时有时需要多张表的查询结果组成一个共同的结果返回,这时就用到了mysql中连接的用法,接下来就以两张表来讲解表连接的原理。2、环境创建两... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com