37 关于 undo 日志

news2024/12/26 21:33:30

前言

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

这里 来看一下 undo, undo 主要是用于 事务回滚 的场景下面 

 

测试表结构如下

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

 

测试数据如下

5f02727c97d84e18b6b6bf8b4f48b9c9.png

 

 

记录更新 undo 业务记录

执行 sql 如下 “update tz_test set field1 = 'field13' where id = '2';”

首先是获取 undo 页的 free 记录的偏移, 然后 开始记录数据

c8860102227f4910910f9534edb3d476.png

 

记录操作类型, undo_no, table_id 等等 相关上下文信息

400cd75f36214bf5a142a226ce2015ef.png

 

记录 info_bits, trx_id, poll_ptr

72f500b26141421e8e9742c7e2ea316c.png 

记录标记当前记录的 字段信息, 这里是 ”where id = 2”

ecadd5ed3d874b2f85ad19c3167428a4.png 

记录更新的相关字段信息, 字段数量, 字段编号, 字段长度, 字段内容 

0755bec570114c66b9bb845895a85947.png 

记录当前 记录 的所有的字段信息, 字段编号, 字段长度, 字段内容 

f492e22829c84aba988833a7fcd0a2f9.png 

记录当前记录的头结点偏移, 下一个记录的偏移, free_ptr 的偏移 

在 mtr 中暂存当前 undo log 的 redo log

0925c658c2fc4287b6de0c05025b4107.png

 

记录当前这条 undo log 的 redo log, 实际上就是 保存了一下这条 undo log 的快照信息 

复制了一份数据到 mtr, mtr 表示 mysql 中的 Mini-Transaction

aa314b878d9c4c91b48a3594cb1b251b.png

 

undo 日志记录完成之后 更新相关元数据, 生成 roll_ptr

e8bfd22254c54a9180ad6154143c33f4.png

 

更新当前记录的 trx_id, roll_ptr

c3dbe674830746889ad1a7670f70c93e.png 

 

记录更新 undo 日志格式 

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

c656bedbf58345f5b2ffdd50b74cfc9d.png

 

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

a5529e52e51b498cabdf4841a6eaac07.png 

 

记录新增 undo 业务记录 

假设执行 sql 如下 “INSERT INTO `test`.`tz_test`(`field1`, `field2`) VALUES ('field11', '11');”  

从下图可以看到待插入记录的 id, field1, field2 的相关信息 

9d3560cfd67c4466bbbbd62bfa0d2bf7.png

 

记录带新增记录 当前的状态, 因为记录待新增 因此没有字段信息

这里仅仅记录 trx->undo_no, table_id, 主键信息, 当前记录偏移信息, 下一个记录偏移信息 

227d963e4543465ba8792ef848e90496.png

 

记录当前记录偏移信息, 下一个记录偏移信息, 记录当前 undo 记录的 redo 记录 

71cd8c6549264849a87a346e2873072f.png

 

 

记录新增 undo 日志格式 

 新增记录的 undo 日志信息如下, 记录相关的信息 主要是 id 

c65ca0804c9048d7a8495f92a5a1c06f.png

 

 

记录删除 undo 业务记录

执行 sql 如下 “delete from tz_test where id = 13;”

因为 mysql 这边先是做的逻辑删除, 因此 就是这边 undo 相关操作 和 记录更新一致, 这里不多赘述 

b33ec9e5f89a412dbabe0eeff5131337.png

 

 

记录新增 undo 的使用

执行 sql 如下 

“begin;

INSERT INTO `test`.`tz_test`(`id`, `field1`, `field2`) VALUES (1111, 'field11', '11');

rollback;

新增记录的 undo log, 的真实处理是 删除对应 主键 对应的记录

比如这里 查询条件为 ”id = 1111”

7596f3e2c10248d480b3928e1ef49841.png

 

具体的删除处理如下, 等价于 普通的 “delete from tz_test where id = 1111;”

3b20bd20164341568b14e4343ba31cd0.png

 

 

记录更新 undo 的使用 

执行 sql 如下 

“begin;

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

rollback;

 

如下这是 事务中的更新语句执行的上下文, field1 的字段由 ”field12” 更新为 ”field33”

55f611b202cf421ab0dba91181a50d37.png

 

如下 这是回滚的时候 更新记录的 undo 的处理 

37620d5af6664b8fbcf7106f028d62ae.png

 

这个 更新的回滚操作如下, 将 field1 字段从 “field33” 更新回 “field12”

e9aba54e56764f9cb598a906bcba5d51.png 

 

完 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础教程之有序字典

嗨喽,大家好呀~这里是爱看美女的茜茜呐 有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的。 普通字典: d1{} d1[a]A d1[b]B d1[c]C d1[d]D #此时的d1 {a:A,b:B,c:C,d:D} for k,v …

本地jar导入maven

一、通过dependency引入 1.1. jar包放置&#xff0c;建造lib目录 1.2. pom.xml文件 <dependency><groupId>zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version><!--system&#xff0c;类似provided&#x…

【Linux】第十八站:进程等待

文章目录 一、进程等待的必要性1.进程等待是什么2.进程等待的必要性3.为什么要进程等待呢&#xff1f; 二、进程等待的方法1.问题2.wait3.waitpid4.status的原理5.等待失败6.与status有关的两个宏7.options 一、进程等待的必要性 1.进程等待是什么 通过系统调用wait/waitpid&a…

压缩感知学习

对稀疏和稀疏矩阵的认识 采样率80Mhz 采样间隔12.5ns,样本数量为800个 一帧时长800*12.5ns 10us 频域间隔 1/10us 0.1Mhz 第一个点的频率是0 第21个点的频率是2Mhz 在只考虑正半轴&#xff0c;也即400个点的情况下&#xff0c;分别让不同的频点取1 &#xff0c;然后对其进…

MySQL优化的底层逻辑

文章目录 前言索引的底层结构数据与索引的关系聚簇索引的数据存储普通索引的数据存储 索引的命中逻辑怎么理解索引失效总结 前言 去年刚开始写博客的时候写了一篇《MySQL性能调优参考》&#xff0c;文章中提到优化的几个技巧&#xff0c;比如数据类型的使用、范式和反范式的合…

安装部署Esxi7.0并创建虚拟机

1. Esxi介绍 ESXI虚拟平台是VMware出品的一个强大平台&#xff0c;它可以直接安装在物理机上&#xff0c;从而充分利用物理奖性能&#xff0c;虚拟多个系统出来。ESXI是一个带WEB管理后台的软件&#xff0c;非常适合安装在服务器上&#xff0c;然后直接通过网页进行远程管理。…

测试开发环境下centos7.9下安装docker的minio

按照以下方法进行 1、安装docker&#xff0c;要是生产等还是要按照docker-ce yum install docker 2、启动docker service docker start 3、 查看docker信息 docker info 4、加到启动里 systemctl enable docker.service 5、开始docker pull minio/minio 但报错&#x…

TP-LINK联洲面试题

文章目录 1.说一下微服务架构?2.微服务优缺点3.负载均衡的实现算法4.Redis集群部署方式?5.MySQL主从复制?5.1 配置流程5.2 优缺点分析6.口头手撕快排7.队列实现栈和栈实现队列7.1 队列实现栈7.2 栈实现队列8.进程有几种状态?9.Spring Boot Actuator?10.外键、主键和索引?…

ImportError: cannot import name ‘url_quote‘ from...

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

Netty传输object并解决粘包拆包问题

⭐️ 前言 大家好&#xff0c;笔者之前写过一篇文章&#xff0c;《Netty中粘包拆包问题解决探讨》&#xff0c;就Netty粘包拆包问题及其解决方案进行了探讨&#xff0c;本文算是这篇博客的延续。探讨netty传输object的问题。 本文将netty结合java序列化来传输object并解决粘包…

C语言——求1/1-1/2+1/3-......+1/99-1/100的值

#include<stdio.h> int main() {int i 1;double sum 0;int flage 1;for(i 1;i < 100; i){sumflage*1.0/i;flage -flage; //正负号}printf("%lf\n",sum);return 0; }

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-B

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

二十一、数组(1)

本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看&#xff0c;数组需要你去创建和初始化&#xff0c;你可以通过下标对数组元素进行访问&#xff0c;数组的大小不会改变。大多数时候你只需要知道这些&#xff0c;但有时候你必须在数组上进行更复杂的操作…

Ubuntu18.04安装Moveit框架

简介 Moveit是一个由一系列移动操作的功能包组成的集成化开发平台,提供友好的GUI,是目前ROS社区中使用度排名前三的功能包,Moveit包含以下三大核心功能,并集成了大量的优秀算法接口: 运动学:KDL,Trac-IK,IKFast...路径规划:OMPL,CHMOP,SBPL..碰撞检测:FCL,PCD... 一、更新功…

前段-用面向对象的方式开发一个水管小鸟的游戏

首先准备好各类空文件 index.js css html 和图片 图片是下面这些&#xff0c;如果没有的可在这里下载 2 开发开始 好了&#xff0c;基础准备工作完毕&#xff0c;开发开始&#xff0c; 首先&#xff0c;先把天空&#xff0c;大地&#xff0c;小鸟的盒子准备好&#xff0c;并…

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于探路者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于探路者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

main函数的数组参数是干嘛用的

今天在看项目代码的时候&#xff0c;突然看到项目中用到了main函数的参数args&#xff0c;在这之前我还没怎么注意过这个参数&#xff0c;一时间居然不知道这个参数是干嘛的&#xff01; 虽然也写过一些java和scala&#xff0c;但是确实没遇到过会用这个参数的情况。 网上就查…

【PIE-Engine 数据资源】中国叶面积指数(LAI)月度合成产品

文章目录 一、 简介二、描述三、波段四、示例代码运行结果参考资料 一、 简介 数据名称中国叶面积指数&#xff08;LAI&#xff09;月度合成产品时间范围2002-2021年空间范围全国数据来源航天宏图代码片段var images pie.ImageCollection(“EMDO/MODIS_MONTH_LAI_CHINA”) 二…

Arduino项目式编程教学前言

前言–先聊聊我的经历 在停更数年之后&#xff0c;还是打算重新开启Arduino编程教学这一项目&#xff1b;这几年间&#xff0c;我从Arduino编程开发教学&#xff0c;转到C及python教学&#xff0c;又到如今的高中数学教学&#xff0c;跨度竟如此之大&#xff0c;但始终未脱离教…

echarts 三角锥形柱状图 + 带阴影的折线图示例

该示例有如下几个特点&#xff1a; ①三角锥形折线图 ②折线图自带阴影 ③三角锥形鼠标放置时颜色改变 ④数据随着鼠标移动而展示 ⑤鼠标放置时tooltip样式自定义&#xff08;echarts 实现tooltip提示框样式自定义-CSDN博客&#xff09; 代码如下&#xff1a; this.options …