MySQL 插入一条 SQL 语句,redo log 记录的内容

在 MySQL 的 InnoDB 存储引擎中,redo log(重做日志)主要用来保证事务的持久性和崩溃恢复能力。redo log 记录的是对数据页的物理变更,而不是 SQL 语句本身。

当执行一条插入语句时,redo log 的记录主要包括对数据页的修改信息,以及事务相关的元数据。以下是 redo log 在执行插入操作时的详细记录过程。


redo log 的核心作用

  1. 崩溃恢复:在数据库崩溃后,通过 redo log 恢复事务已提交但未写入磁盘的数据。
  2. 事务提交持久性:redo log 提供持久化保障,即使数据尚未完全刷入磁盘,也可以通过 redo log 恢复数据。

redo log 的记录内容

假设执行如下插入语句:

INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30);

redo log 会记录以下内容:

  1. 事务元信息

    • 事务开始(BEGIN)。
    • 事务结束(COMMITROLLBACK)。
  2. 页修改操作

    • 记录被修改的页(page)的编号和偏移量。
    • 修改的内容(如插入了哪些记录、更新了哪些数据)。
    • 仅记录具体的物理变更,而不是 SQL 语句本身。
  3. 日志类型

    • 分为 PREPARE(事务准备阶段)和 COMMITTED(事务提交阶段)。
  4. 顺序性保证

    • redo log 按顺序记录,以保证崩溃恢复时能按正确顺序重放日志。

redo log 的记录过程

  1. 事务开始

    redo log 写入事务开始的记录。

  2. 内存中的数据页变更

    • 修改页被加载到内存中(称为缓冲池)。
    • 在缓冲池中对数据页进行修改,同时将变更写入 redo log。
  3. redo log 持久化

    • 事务提交时,先将 redo log 刷入磁盘(称为 "刷盘")。
    • 此时,即使数据页尚未写回磁盘(即未同步到表空间文件),也能通过 redo log 恢复。
  4. 事务提交

    • redo log 记录事务提交的标志,表示事务完成。

示例 redo log 记录内容

以上述 INSERT 语句为例,redo log 的记录内容可能类似如下:

  1. 事务开始标志(BEGIN)。
  2. 修改第 N 页某位置的数据:
    • 在页的某个偏移量插入了一条记录(如用户 ID 为 1 的记录)。
    • 页的元数据(如记录计数、空闲空间等)发生了相应更新。
  3. 事务提交标志(COMMIT)。

总结

  • redo log 记录的是物理层面的数据页变更,而不是 SQL 语句或逻辑操作。
  • 其设计目标是通过最小化写操作的开销来提高性能,同时提供崩溃恢复的能力。
  • redo log 的记录过程遵循 WAL(Write-Ahead Logging) 原则,即先写日志,再更新数据。

MySQL 插入一条 SQL 语句,redo log 记录的是什么?的更多相关文章

  1. 一条SQL语句求前面记录的平均值

    有算法要求如下: For (i=1,i<=10,i++) { ta[i] = (t[1] + t[2] + ... + t[i]) / i; } 用一条SQL语句实现它: 分别用表变量 @ta ...

  2. nodejs mysql 执行多条sql语句

    执行多条查询语句 为了安全起见,默认情况下是不允许执行多条查询语句的.要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能: var connection = mysql.createC ...

  3. Yii查看(输出)当前页面执行的sql语句(log记录)

    在Yii框架下查看当前页面执行的所有sql语句的方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下: (1)修改 index.php 开启调试模式 在 index.php 文件内增加如下 ...

  4. 一次性插入多条sql语句的几种方法

    第一种:通过 insert select语句向表中添加数据 从现有表里面把数据插入到另外一张新表去前提必须先有test_2表的存在,并且test_2表中的列的数据类型必须和test表里面列的数据类型一 ...

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

    本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...

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

    一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的. 先简单介绍一下下图 ...

  7. 一条SQL语句在MySQL中如何执行

    一条SQL语句在MySQL中如何执行 本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会 ...

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

    概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...

  9. mysql基础-- 一条请求执行多条SQL语句

    最近做一个数据库初始化工具的时候发现了这个问题,就是在一个Statement中执行一条SQL语句的时候可以正确执行,如果同时执行多条,就会报SQL语法错误,伤透了脑筋. 经过网上查找,发现有两种解决办 ...

  10. mysql(1)—— 详解一条sql语句的执行过程

    SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...

随机推荐

  1. Bottleup pg walkthrough Intermediate

    一开始看到page=view/.html的时候就想到目录穿越了尝试../../../../../../../../../../../etc/passwd 发现不行 找半天其他可能存在漏洞的地方又找不到 ...

  2. 0415-File类和FileFilter接口

    package demoFile; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; imp ...

  3. 《Vue2 框架第二课:组件结构与模板语法详解》

    写在开头:Vue.js 是一个流行的前端框架,广泛应用于构建用户界面和单页应用(SPA).然而,需要注意的是,Vue2 已经于 2023 年底 正式停止维护.这意味着官方团队将不再为 Vue2 提供功 ...

  4. 快速集成和使用 solon-flow 规则与流引擎(用 yaml 编写业务规则)

    本文参考自:https://www.cnblogs.com/studyjobs/p/18125096 规则引擎技术的主要思想是将应用程序中的业务规则分离出来,业务规则不再以程序代码的形式驻留在系统中, ...

  5. MOS管选型

    MOS管基本参数 MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)作为开关元件的应用非常广泛,其开关特性与三极管相比有所不 ...

  6. ETL工程师

    Python Flume DataX HDFS 数仓建模分层:ODS.DIM.DWD.DWS.APS Kettle.Informatica SQL(Oracle.MySQL)

  7. 「一」nginx介绍

    应用场景 静态资源(js.css.图片 ) 反向代理 缓存加速(动态资源),比如社区活跃度排名 负载均衡(动态扩容.容灾) API服务 一个请求先经过nginx,再到应用服务器,访问数据库/redis ...

  8. 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!

    3月6日最新消息,阿里云通义千问官方宣布推出最新推理模型 QwQ-32B,这一模型仅有 32B 参数,但在效果上与拥有 671B 参数的 DeepSeek-R1 相媲美.如果你自己部署 DeepSee ...

  9. Qt QHeaderView 添加复选框

    QT QTableView 表头添加复选框 最近在做表格,用QTableView,然后有一个需求是给表格添加表头,但是没有一个API能够在表头添加复选框,基本都是来重载QHeaderView,有两种方 ...

  10. Vulnhub-venom

    对于该靶机,注意利用了信息收集来的21端口和80端口,网站源码发现账户,ftp匿名登录密码猜测,维吉尼亚解密,后台管理员登录,CVE文件上传RCE漏洞利用反弹shell,提权有两中,利用版本内核提权和 ...