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

发布于:2024-05-04 ⋅ 阅读:(27) ⋅ 点赞:(0)

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








网站公告

今日签到

点亮在社区的每一天
去签到