MySQL 插入一条 SQL 语句,redo log 记录的是什么?
MySQL 插入一条 SQL 语句,redo log 记录的内容
在 MySQL 的 InnoDB 存储引擎中,redo log(重做日志)主要用来保证事务的持久性和崩溃恢复能力。redo log 记录的是对数据页的物理变更,而不是 SQL 语句本身。
当执行一条插入语句时,redo log 的记录主要包括对数据页的修改信息,以及事务相关的元数据。以下是 redo log 在执行插入操作时的详细记录过程。
redo log 的核心作用
- 崩溃恢复:在数据库崩溃后,通过 redo log 恢复事务已提交但未写入磁盘的数据。
- 事务提交持久性:redo log 提供持久化保障,即使数据尚未完全刷入磁盘,也可以通过 redo log 恢复数据。
redo log 的记录内容
假设执行如下插入语句:
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30);
redo log 会记录以下内容:
事务元信息:
- 事务开始(
BEGIN)。 - 事务结束(
COMMIT或ROLLBACK)。
- 事务开始(
页修改操作:
- 记录被修改的页(page)的编号和偏移量。
- 修改的内容(如插入了哪些记录、更新了哪些数据)。
- 仅记录具体的物理变更,而不是 SQL 语句本身。
日志类型:
- 分为
PREPARE(事务准备阶段)和COMMITTED(事务提交阶段)。
- 分为
顺序性保证:
- redo log 按顺序记录,以保证崩溃恢复时能按正确顺序重放日志。
redo log 的记录过程
事务开始:
redo log 写入事务开始的记录。内存中的数据页变更:
- 修改页被加载到内存中(称为缓冲池)。
- 在缓冲池中对数据页进行修改,同时将变更写入 redo log。
redo log 持久化:
- 事务提交时,先将 redo log 刷入磁盘(称为 "刷盘")。
- 此时,即使数据页尚未写回磁盘(即未同步到表空间文件),也能通过 redo log 恢复。
事务提交:
- redo log 记录事务提交的标志,表示事务完成。
示例 redo log 记录内容
以上述 INSERT 语句为例,redo log 的记录内容可能类似如下:
- 事务开始标志(
BEGIN)。 - 修改第 N 页某位置的数据:
- 在页的某个偏移量插入了一条记录(如用户 ID 为 1 的记录)。
- 页的元数据(如记录计数、空闲空间等)发生了相应更新。
- 事务提交标志(
COMMIT)。
总结
- redo log 记录的是物理层面的数据页变更,而不是 SQL 语句或逻辑操作。
- 其设计目标是通过最小化写操作的开销来提高性能,同时提供崩溃恢复的能力。
- redo log 的记录过程遵循 WAL(Write-Ahead Logging) 原则,即先写日志,再更新数据。
MySQL 插入一条 SQL 语句,redo log 记录的是什么?的更多相关文章
- 一条SQL语句求前面记录的平均值
有算法要求如下: For (i=1,i<=10,i++) { ta[i] = (t[1] + t[2] + ... + t[i]) / i; } 用一条SQL语句实现它: 分别用表变量 @ta ...
- nodejs mysql 执行多条sql语句
执行多条查询语句 为了安全起见,默认情况下是不允许执行多条查询语句的.要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能: var connection = mysql.createC ...
- Yii查看(输出)当前页面执行的sql语句(log记录)
在Yii框架下查看当前页面执行的所有sql语句的方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下: (1)修改 index.php 开启调试模式 在 index.php 文件内增加如下 ...
- 一次性插入多条sql语句的几种方法
第一种:通过 insert select语句向表中添加数据 从现有表里面把数据插入到另外一张新表去前提必须先有test_2表的存在,并且test_2表中的列的数据类型必须和test表里面列的数据类型一 ...
- 一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...
- 一条 SQL 语句在 MySQL 中如何执行的
一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的. 先简单介绍一下下图 ...
- 一条SQL语句在MySQL中如何执行
一条SQL语句在MySQL中如何执行 本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会 ...
- 一条SQL语句在MySQL中是如何执行的
概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...
- mysql基础-- 一条请求执行多条SQL语句
最近做一个数据库初始化工具的时候发现了这个问题,就是在一个Statement中执行一条SQL语句的时候可以正确执行,如果同时执行多条,就会报SQL语法错误,伤透了脑筋. 经过网上查找,发现有两种解决办 ...
- mysql(1)—— 详解一条sql语句的执行过程
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
随机推荐
- Bottleup pg walkthrough Intermediate
一开始看到page=view/.html的时候就想到目录穿越了尝试../../../../../../../../../../../etc/passwd 发现不行 找半天其他可能存在漏洞的地方又找不到 ...
- 0415-File类和FileFilter接口
package demoFile; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; imp ...
- 《Vue2 框架第二课:组件结构与模板语法详解》
写在开头:Vue.js 是一个流行的前端框架,广泛应用于构建用户界面和单页应用(SPA).然而,需要注意的是,Vue2 已经于 2023 年底 正式停止维护.这意味着官方团队将不再为 Vue2 提供功 ...
- 快速集成和使用 solon-flow 规则与流引擎(用 yaml 编写业务规则)
本文参考自:https://www.cnblogs.com/studyjobs/p/18125096 规则引擎技术的主要思想是将应用程序中的业务规则分离出来,业务规则不再以程序代码的形式驻留在系统中, ...
- MOS管选型
MOS管基本参数 MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)作为开关元件的应用非常广泛,其开关特性与三极管相比有所不 ...
- ETL工程师
Python Flume DataX HDFS 数仓建模分层:ODS.DIM.DWD.DWS.APS Kettle.Informatica SQL(Oracle.MySQL)
- 「一」nginx介绍
应用场景 静态资源(js.css.图片 ) 反向代理 缓存加速(动态资源),比如社区活跃度排名 负载均衡(动态扩容.容灾) API服务 一个请求先经过nginx,再到应用服务器,访问数据库/redis ...
- 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
3月6日最新消息,阿里云通义千问官方宣布推出最新推理模型 QwQ-32B,这一模型仅有 32B 参数,但在效果上与拥有 671B 参数的 DeepSeek-R1 相媲美.如果你自己部署 DeepSee ...
- Qt QHeaderView 添加复选框
QT QTableView 表头添加复选框 最近在做表格,用QTableView,然后有一个需求是给表格添加表头,但是没有一个API能够在表头添加复选框,基本都是来重载QHeaderView,有两种方 ...
- Vulnhub-venom
对于该靶机,注意利用了信息收集来的21端口和80端口,网站源码发现账户,ftp匿名登录密码猜测,维吉尼亚解密,后台管理员登录,CVE文件上传RCE漏洞利用反弹shell,提权有两中,利用版本内核提权和 ...