38 关于 redo 日志

前言

undo 和 redo 是在 mysql 中 事务, 或者 异常恢复 的场景下面 经常会看到的两个概念

这里 来看一下 redo, redo 主要是用于 异常恢复 的场景下面

测试表结构如下

复制代码
CREATE TABLE `tz_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(128) DEFAULT NULL,
  `field2` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `field_1_2` (`field1`,`field2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

测试数据如下

记录更新 re do 业务记录

执行 sql 如下

"begin;

update tz_test set field1 = 'field23' where id = 2;

rollback;

"

在 mtr 中分配 buff 来存放 redo log

存放 type, space_id, page_no, 字段数量, 唯一确定记录的字段索引, 各个字段的长度列表

存放 flags, trxId, pollPtr, 记录偏移

存放更新字段数量, 以及更新之后的 字段列表信息

记录更新 re do 日志格式

查看一下 待更新的记录信息, id 为 2, field1 为 'field23'

断点处是是记录 redo 的时候, 记录已经是更新之后的记录了

redo 日志记录如下, 这里具体 拆分到每一个字节

记录新增 redo 业务记录

执行 sql 如下

"begin;

insert into tz_test (field1, field2) values ('field11', '11');

rollback;

"

在 mtr 中分配 buff 来存放 redo log

存放 type, space_id, page_no, 字段数量, 唯一确定记录的字段索引, 各个字段的长度列表

存放 记录的偏移, info_bits

然后接下来是 拷贝当前记录的信息

记录新增 re do 日志格式

查看一下 待更新的记录信息, id 为 2, field1 为 'field11'

断点处是是记录 redo 的时候, 记录已经是更新之后的记录了

redo 日志记录如下, 这里具体 拆分到每一个字节

记录 删除 redo 业务记录

执行 sql 如下

"begin;

delete from tz_test where id = 2;

rollback;

"

在 mtr 中分配 buff 来存放 redo log

存放 type, space_id, page_no, 字段数量, 唯一确定记录的字段索引, 各个字段的长度列表

存储 trxId, pollPtr

存储当前记录的 偏移

记录删除 re do 日志格式

查看一下 待更新的记录信息, id 为 2, field1 为 'field12'

断点处是是记录 redo 的时候, 记录已经是更新之后的记录了

redo 日志记录如下, 这里具体 拆分到每一个字节

redo 的使用

主要是 在异常的时候 使用, 这里 构造情况 比较麻烦, 就不展示了

然后 和 undo 的相关处理差不多

对于 对应的 新增, 更新, 删除 操作, 重新 apply 对应的操作

相关推荐
AI军哥11 分钟前
MySQL8的安装方法
人工智能·mysql·yolo·机器学习·deepseek
程序员不想YY啊43 分钟前
MySQL元数据库完全指南:探秘数据背后的数据
数据库·mysql·oracle
柏油3 小时前
MySql InnoDB 事务实现之 undo log 日志
数据库·后端·mysql
jack xu13 小时前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch
炫彩@之星4 小时前
Mysql之UDF提权
mysql·udf提权
爱的叹息5 小时前
DeepSeek 大模型 + LlamaIndex + MySQL 数据库 + 知识文档 实现简单 RAG 系统
数据库·人工智能·mysql·langchain
橘猫云计算机设计5 小时前
net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·爬虫·python·mysql·django·毕业设计
黄嚯嚯5 小时前
Mysql8.0 推出的强大功能 窗口函数(Window Functions)
数据库·mysql
神仙别闹5 小时前
基于Java+MySQL 实现(Web)日程管理系统
java·前端·mysql
苹果酱05676 小时前
2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)
java·vue.js·spring boot·mysql·课程设计