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

本文详细解释了MySQL事务的执行流程,包括事务如何通过RedoLog和UndoLog进行数据操作及脏页处理;同时阐述了事务恢复流程,特别是在服务器崩溃后如何利用RedoLog和UndoLog进行数据恢复或回滚。
摘要由CSDN通过智能技术生成

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 恢复数据即可。







  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值