深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解

本文主要是介绍深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解
    • MySQL 中的 XA 事务
      • 1、XA 事务的基本原理
        • 1-1:XA 事务模型图:
        • 1-2:XA 事务模型的两阶段提交操作:Prepare 准备阶段 和 Commit 提交阶段 流程图:
          • 1-2-1:在 PrePare 准备阶段:
          • 1-2-2:在 Commit 提交阶段:
      • 2、MySQL 的 XA 事务语法
        • 2-1:在 MySQL 命令行输入如下命令可以查看存储引擎是否支持 XA 事务
        • 2-2:MySQL XA 事务的基本语法如下所示:
        • 2-3:MySQL 官方文档中对于 XA 事务的一个简单示例:
        • 2-4:MySQL XA 事务 使用 xid 标识分布式事务,xid 主要由以下几部分组成:
        • 2-5:演示 XA 事务回滚
        • 简单说下:内部 XA 事务 和 外部 XA 事务

MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解


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

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

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

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

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

Redo Log :重做日志

Undo Log :回滚日志

BinLog:二进制日志文件

MySQL 事务的流程;

MySQL 中的 XA 事务。


MySQL 中的 XA 事务

MySQL 中的 XA 事务全称是 “eXtended Architecture Transaction”,即扩展架构事务。

MySQL 5.0.3 版本开始支持 XA 分布式事务,并且只有 InnoDB 存储引擎支持 XA 事务。


1、XA 事务的基本原理

XA 事务支持不同数据库之间实现分布式事务。

这里的不同数据库,可以是不同的 MySQL 实例,也可以是不同的数据库类型,比如 ,MySQL 数据库和 Oracle 数据库。

XA 事务本质上是一种 基于两阶段提交的分布式事务 ,分布式事务可以简单理解为多个数据库事务共同完成一个原子性的事务操作。参与操作的多个事务要么全部提交成功,要么全部提交失败。

在使用 XA 分布式事务时,InnoDB 存储引擎的事务隔离级别需要设置为 串行化

XA 事务由 一个事务管理器(Transaction Manager)一个或者多个资源管理器(Resource Manager)一个应用程序(Application Program) 组成,组成模型如图:


1-1:XA 事务模型图:

在这里插入图片描述

1、事务管理器:主要对参与全局事务的各个分支事务进行协调,并与资源管理器进行通信。

2、资源管理器:主要提供对事务资源的访问能力。实际上,一个数据库既可以看作一个资源管理器。

3、应用程序:主要用来明确全局事务和各个分支事务,指定全局事务中的各个操作。


1-2:XA 事务模型的两阶段提交操作:Prepare 准备阶段 和 Commit 提交阶段 流程图:

因为 XA 事务是基于两阶段提交的分布式事务,所以 XA 事务也被拆分为 Prepare 阶段 和 Commit 阶段。

在这里插入图片描述


1-2-1:在 PrePare 准备阶段:

1、事务管理器向资源管理器发送准备指令,

2、资源管理器接收到指令后,执行数据的修改操作并记录相关的日志信息,

3、然后向事务管理器返回可以提交或者不可以提交的结果信息。


1-2-2:在 Commit 提交阶段:

4、事务管理器接收所有资源管理器返回的结果信息。

5、如果某一个或多个资源管理器向事务管理器返回的结果信息为不可以提交,或者超时,则事务管理器向所有的资源管理发送回滚指令。

6、如果事务管理器接收到的所有资源管理器返回的结果信息为可以提交,则事务管理器向所有的资源管理器发送提交事务的命令。


2、MySQL 的 XA 事务语法


2-1:在 MySQL 命令行输入如下命令可以查看存储引擎是否支持 XA 事务
show engines \G
# 登录 mysql 服务器
e:
cd E:\install\mysql8\mysql-8.0.21-winx64\bin
mysql -u root -p
密码:123456# 使用这个test数据库
use test;show engines \G

在这里插入图片描述

从输出的结果信息来看,只有 InnoDB 存储引擎支持事务、XA 事务 和 事务保存点。


2-2:MySQL XA 事务的基本语法如下所示:

1、开启 XA 事务,如果使用的是 XA START 命令而不是 XA BEGIN 命令,则不支持 [ JOIN | RESUME ] ,xid 是一个唯一值,表示事务分支标识符,语法如下:

-- 1、开启 XA 事务,如果使用的是 XA start 命令而不是 XA begin 命令,则不支持 [JOIN|RESUME],
-- xid 是一个唯一值,表示事务分支标识符,语法如下:
XA {START|BEGIN} xid [JOIN|RESUME]-- 2、结束一个 XA 事务,不支持 [SUSPEND [FOR MIGRATE]] ,语法如下:
XA END xid [SUSPEND [FOR MIGRATE]]-- 3、准备提交 XA 事务
XA PREPARE xid-- 4、提交 XA 事务,如果使用了 one phase 命令,表示使用一阶段提交。
-- 在两阶段提交协议中,如果只有一个资源管理器参与操作,则可以优化为 一阶段提交。
XA COMMIT xid [ONE PHASE]-- 5、回滚 XA 事务
XA ROLLBACK xid-- 6、列出所有处于准备阶段的 XA 事务。
XA RECOVER [CONVERT XID]

15.3.8.1 XA Transaction SQL Statements

在这里插入图片描述


2-3:MySQL 官方文档中对于 XA 事务的一个简单示例:

演示 MySQL 作为全局事务中的一个事务分支,将一行记录插入一个表:

在这里插入图片描述


select * from account;# 开启一个 XA 事务
xa start 'ljh_xid';# 插入一条数据
insert into account (id,name,balance) values ('10','小白',1000);# 结束一个 XA 事务
xa end 'ljh_xid';# 准备提交 XA 事务
xa prepare 'ljh_xid';# 提交 XA 事务
xa commit 'ljh_xid';

15.3.8.2 XA Transaction States

在这里插入图片描述


2-4:MySQL XA 事务 使用 xid 标识分布式事务,xid 主要由以下几部分组成:
xid :  gtrid [ , bqual [ , formatID ] ]

gtrid:必须要有,为字符串,表示全局事务标识符。

bqual:可选,为字符串,默认是空串,表示分支限定符。

formatID:可选,默认值为 1 ,用于标识 gtrid 和 bqual 值使用的格式。


2-5:演示 XA 事务回滚

在这里插入图片描述


# 执行查询
select * from account;# 开启一个 XA 事务
xa start 'jjj_xid';# 插入一条数据
insert into account (id,name,balance) values ('20','小黄',2000);# 执行查询
select * from account;# 结果一个 XA 事务
xa end 'jjj_xid';# 列出所有处于准备阶段的 XA 事务
xa recover;# 准备提交 XA 事务,让 XA 事务处于准备阶段
xa prepare 'jjj_xid';# 列出所有处于准备阶段的 XA 事务
xa recover;# 执行查询
select * from account;# 回滚 XA 事务
xa rollback 'jjj_xid';# 执行查询
select * from account;# 提交 XA 事务
xa commit 'jjj_xid';

简单说下:内部 XA 事务 和 外部 XA 事务

在某种程度上, MySQL XA 事务可以分为 内部 XA 事务外部 XA 事务

外部 XA 事务 属于分布式事务的一种实现方式,而 内部 XA 事务 则表示 MySQL 使用了 InnoDB 作为存储引擎,并且开启了 BinLog ,为了保证 BinLog 与 Redo Log 的一致性,MySQL 内部使用了 XA 事务。







这篇关于深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961351

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于