深入理解分布式事务⑧ ---->MySQL 事务的实现原理 之 MySQL 事务流程(MySQL 事务执行流程 和 恢复流程)详解

目录

  • MySQL 事务的实现原理 之 MySQL 事务流程(MySQL 事务执行流程 和 恢复流程)详解
    • MySQL 事务流程
      • 1、MySQL 事务执行流程
        • 1-1:MySQL 事务执行流程如图:
      • 2、MySQL 事务恢复流程
        • 2-1:事务恢复流程如下图:

MySQL 事务的实现原理 之 MySQL 事务流程(MySQL 事务执行流程 和 恢复流程)详解


MySQL 作为互联网行业使用最多的关系型数据库之一,其 InnoDB 存储引擎本身就支持事务。

MySQL 的事务实现离不开 Redo Log(重做日志) 和 Undo Log (回滚日志)。

从某种程度上说,事务的隔离性是由 锁 和 MVCC 机制实现的,原子性 和 持久性 是有 Redo Log 实现的,一致性是由 Undo Log 实现的。

Redo:重做、重复、恢复
Undo:撤销、取消

MySQL 事务的实现原理,涉及的内容大概有:

Redo Log :重做日志

Undo Log :回滚日志

BinLog:二进制日志文件

MySQL 事务的流程;

MySQL 中的 XA 事务。


MySQL 事务流程

MySQL 的事务流程分为 MySQL 事务执行流程MySQL 事务恢复流程


1、MySQL 事务执行流程

前面的文章介绍了 Redo Log (事务日志、重做日志)、Undo Log(回滚日志)和 BInLog(二进制日志),MySQL 事务执行的过程中,主要是通过 Redo Log 和 Undo Log 实现的。


1-1:MySQL 事务执行流程如图:

在这里插入图片描述

如图,可以看出,MySQL 在事务执行的过程中,会记录相应的 SQL 语句到 Undo Log 和 Redo Log,然后在内存中更新数据并形成脏页。
接下来 Redo Log 会根据一定的规则触发刷盘操作,Undo Log 和 数据脏页则通过 检查点机制 刷盘。
事务提交时,会将当前事务相关的的所有 Redo Log 刷盘,只有当前事务相关的所有 Redo Log 刷盘成功,事务才算提交成功。


脏页(内存页):

干净页:内存和磁盘中的数据一致
脏页:内存和磁盘中的数据不一致

为什么会出现 脏页?

平时很快的更新操作,都是在写内存和日志。 他并不会马上同步到磁盘数据页,这时内存数据页跟磁盘数据页内容不一致,我们称之为脏页。


2、MySQL 事务恢复流程

如果事务执行一切正常,则 MySQL 事务会按照上面的【MySQL事务执行流程图】的顺序执行。

实际上,MySQL 事务的执行不会总是那么顺利。如果 MySQL 由于某种原因崩溃或者宕机,则需要进行数据的恢复或者回滚操作。

按照【MySQL事务执行流程图】所示,如果事务在执行第 8 步,即事务提交之前,MySQL 崩溃或者宕机,此时会先使用 Redo Log 恢复数据,然后再使用 Undo Log 回滚数据。

如果在执行第 8 步之后 MySQL 崩溃或者宕机,此时会使用 Redo Log 恢复数据。


2-1:事务恢复流程如下图:

大致的事务恢复流程如下图所示:

在这里插入图片描述


如图可以看出,MySQL 发生崩溃或者宕机时,需要重启 MySQL 服务器。

MySQL 重启之后,会获取日志检查点信息,随后根据日志检查点信息使用 Redo Log 恢复数据。

如果在 MySQL 崩溃或者宕机时,事务还没有提交,则接下来使用 Undo Log 回滚数据。

如果在 MySQL 崩溃或者宕机时,事务已经提交,则用 Redo Log 恢复数据即可。







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

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

相关文章

基于V4L2框架的摄像头从上层到底层开发

文章目录 一、V4L2应用开发1、识别摄像头2、查看摄像头设备的能力3、查看支持视频格式4、设置视频格式5、申请帧缓冲6、启动采集7、出队取一帧图像8、入队归还帧缓冲9、停止视频采集10、退出释放资源 二、V4L2框架源码分析1、struct video_device2、struct v4l2_device *v4l2_d…

HAL库 嵌入式

HAL库 “HAL库”(Hardware Abstraction Layer Library,硬件抽象层库)通常是指在嵌入式系统开发中用来提供硬件操作抽象的软件库,使得应用程序可以在不直接操作硬件的情况下与硬件通信。这种库通常是由硬件制造商提供,用…

python json字符串怎么用format方法填充参数值报KeyError

python json字符串怎么用format方法填充参数值报KeyError 需求问题分析解决方案 需求 因为python中的字典和json中的一些变量有差异,比如:json中有null、true,在python中就不会被识别,只能转换成字符串,在通过loads()…

Java对象的比较(详解三种比较方式)

Java对象的比较 一、基本类型的比较二、引用类型的比较三、三种自定义比较的方式1、重写equals()方法2、基于Comparble接口比较3、基于Comparator比较器进行比较 一、基本类型的比较 对于Java中的基本类型而言,Java可以对其直接比较。整型浮点型就是直接比较其大小…

C#核心之面向对象-继承

面向对象-继承 文章目录 1、继承的基本规则1、基本概念2、基本语法3、示例4、访问修饰符的影响5、子类和父类的同名成员 2、里氏替换原则1、基本概念2、is和as3、基本实现 3、继承中的构造函数1、基本概念2、父类的无参构造函数3、通过base调用指定父类构造 4、万物之父和装箱拆…

关于ESP32下载的几个小问题

文章目录 一、没有收到串口数据二、vscode使用jtag烧录失败 在使用esp32的时候,下载遇到了这么几个小问题,写一下解决方法。 一、没有收到串口数据 报错如下: 这是在使用arduino下载的时候出现的错误:A fatal error occurred: …

Shell命令和基础学习

Shell的作用: 解释执行用户输入的命令或程序等用户输入一条命令,shell就解释一条键盘输入命令,Linux就给出响应的方式,称为交互式 外层应用程序 -> shell解释器 -> 操作系统核心 -> 机器硬件 shell脚本: wi…

c++多线程2小时速成

简介 c多线程基础需要掌握这三个标准库的使用&#xff1a;std::thread,std::mutex, andstd::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::th…

Web Component fancy-components

css-doodle 组件库 fancy-components 组件库使用 yarn add fancy-components使用&#xff1a; import { FcBubbles } from fancy-components new FcBubbles() //要用哪个就new哪个 new 这里可能会报错eslink,eslintrc.js中处理报错 module.exports {rules: {no-new: off} …

日志审计系统在提高网络安全方面具有哪些重要的作用

随着信息技术的飞速发展&#xff0c;我们正处于一个高度互联、数据驱动的网络时代。在这个时代&#xff0c;日志审计系统作为网络安全和信息管理的重要工具&#xff0c;发挥着至关重要的作用。下面德迅云安全就详细介绍下关于日志审计系统在当今网络时代的重要性。 一、什么是日…

四、Redis五种常用数据类型-List

List是Redis中的列表&#xff0c;按照插入顺序保存数据&#xff0c;插入顺序是什么样的&#xff0c;数据就怎么保存。可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含232-1个元素(4294967295&#xff0c;每个列表超过40亿个元素)。是一种双向列表结构…

Redis单机安装

1.编译 cd redis安装目录 makemake install2.修改配置文件redis.conf #端口修改 port 6379 #后台进程启动 yes daemonize yes # daemonize no #注释掉 为了可以远程连接 #bind 127.0.0.1 #设置密码 requirepass pwd3.启动 ./redis-server ../redis.conf查看进程 [rootlocal…

使用Maven对Java独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Java应用程序代码 1.版本信息&#xff1a; Spark-2.1…

Python机器翻译包Translate:多语种翻译利器

Python机器翻译包Translate&#xff1a;多语种翻译&#xff0c;效果卓越&#xff01; 随着全球化的不断深化&#xff0c;跨语言沟通成为人们越来越重要的需求。而如今&#xff0c;Python作为一种功能强大的编程语言&#xff0c;正以其独特的优势和实用性&#xff0c;在机器翻译…

设计软件有哪些?渲染软件篇(1),渲染100邀请码1a12

做设计要用到很多软件&#xff0c;今天我给大家介绍一些渲染方面的&#xff0c;仅供参考。 1、渲染100(http://www.xuanran100.com/?ycode1a12) 渲染100是网渲平台&#xff0c;为设计师提供高性能的渲染服务。通过它设计师可以把本地渲染移到云端进行&#xff0c;速度快价格便…

APP广告变现:自刷的秘密与规则

在移动互联网时代&#xff0c;广告已成为众多APP盈利的主要方式之一。对于开发者和运营者而言&#xff0c;如何通过广告变现提高收益是他们必须关注的问题。然而&#xff0c;在众多的变现方法中&#xff0c;“自刷广告”这一概念可能让一些人感到迷惑。实际上&#xff0c;只要在…

高频SQL 第二高的薪水

题目信息 Employee 表&#xff1a; ------------------- | Column Name | Type | ------------------- | id | int | | salary | int | ------------------- 在 SQL 中&#xff0c;id 是这个表的主键。 表的每一行包含员工的工资信息。查询并返回 Employee 表…

巨资回流,量子投资热潮再起

一股新的信心和资金浪潮正在席卷量子计算产业。 2023年4月30日&#xff0c;澳大利亚联邦政府和昆士兰州政府宣布共同出资9.4亿澳元&#xff08;约合6.2亿美元&#xff09;&#xff0c;支持美国初创企业PsiQuantum在布里斯班附近建设一台大型量子计算机。这项投资是最新的迹象之…

字符串的赋值

因为字符串本质上就是数组&#xff0c;因此它的赋值也具有数组的特点&#xff1a;只能在初始化时用等号。 1&#xff0e;字符串的初始化 方法一&#xff1a;指定大小 char s[6]"Hello"; //指定字符串最大占用6个的char型内存单元 虽然看上去是将整个字符串赋给了…

RT-IoT2022 数据集-扩展数据(自制方法)

数据集官网Discover datasets around the world!https://archive.ics.uci.edu/dataset/942/rt-iot2022RT-IoT2022 是源自实时物联网基础设施的专有数据集&#xff0c;作为集成了各种物联网设备和复杂网络攻击方法的综合资源而引入。该数据集包含正常和对抗性网络行为&#xff0…