MySQL 数据库的 XA 规范

XA规范及2PC 3PC 介绍 XA 规范的定位:是早期为解决分布式事务(一个系统操作多个数据库)问题制定的一套解决方案,定义了分布式事务模型。模型中的角色:AP(应用程序):发起分布式事务操作的应用主体。TM(事务管理器):负责统筹管理整个事务流程。RM(资源管理器):具体资源的管理方,如数据库(示例中以 MySQL 说明)。CRM(通信资源管理器):处理事务过程中的通信,属于可选组件(如消息中间件)。核心概念:全局事务。 阅读详情

MySQL 有哪些一致性日志

redo 日志:每当有操作执行前,在数据真正更改前,会先把相关操作写入 redo 日志。这样当断电,或者发生一些意外,导致后续任务无法完成时,待系统恢复后,可以继续完成这些更改。

undo 日志:也叫撤消日志,记录事务开始前数据的状态,当一些更改在执行一半时,发生意外而无法完成,就可以根据撤消日志恢复到更改之前的状态。举个例子,事务 T1 更新数据 X,对 X 执行 Update 操作,从 10 更新到 20,对应的 Redo 日志为 <T1, X, 20>,Undo 日志为 <T1, X, 10>。

binlog 日志 :是 MySQL sever 层维护的一种二进制日志,是 MySQL 最重要的日志之一,它记录了所有的 DDL 和 DML 语句,除了数据查询语句 select、show 等,还包含语句所执行的消耗时间。

binlog 与 InnoDB 引擎中的 redo/undo log 不同,binlog 的主要目的是复制和恢复,用来记录对 MySQL 数据更新或潜在发生更新的 SQL 语句,并以事务日志的形式保存在磁盘中。binlog 主要应用在 MySQL 的主从复制过程中,MySQL 集群在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 节点,再从节点回放来达到 master-slave 数据一致的目的

//查看binlog文件的内容
show binlog events;

//查看指定binlog文件的内容
show binlog events in 'MySQL-bin.000001';

//查看正在写入的binlog文件
show master status\G
 
//获取binlog文件列表
show binary logs;

XA 规范如何定义

XA 是由 X/Open 组织提出的分布式事务规范,XA 规范主要定义了事务协调者(Transaction Manager)和资源管理器(Resource Manager)之间的接口

 

事务协调者(Transaction Manager):因为 XA 事务是基于两阶段提交协议的,所以需要有一个协调者,来保证所有的事务参与者都完成了准备工作,也就是 2PC 的第一阶段。如果事务协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交,也就是 2PC 的第二阶段。

在前面的内容中我们提到过,之所以需要引入事务协调者,是因为在分布式系统中,两台机器理论上无法达到一致的状态,需要引入一个单点进行协调。协调者,也就是事务管理器控制着全局事务,管理事务生命周期,并协调资源。

资源管理器(Resource Manager):负责控制和管理实际资源,比如数据库或 JMS 队列。

目前,主流数据库都提供了对 XA 的支持,在 JMS 规范中,即 Java 消息服务(Java Message Service)中,也基于 XA 定义了对事务的支持

XA 事务的执行流程

XA 事务是两阶段提交的一种实现方式,根据 2PC 的规范,XA 将一次事务分割成了两个阶段,即 Prepare 和 Commit 阶段。

Prepare 阶段:TM 向所有 RM 发送 prepare 指令,RM 接受到指令后,执行数据修改和日志记录等操作,然后返回可以提交或者不提交的消息给 TM。如果事务协调者 TM 收到所有参与者都准备好的消息,会通知所有的事务提交,然后进入第二阶段。

Commit 阶段:TM 接受到所有 RM 的 prepare 结果,如果有 RM 返回是不可提交或者超时,那么向所有 RM 发送 Rollback 命令;如果所有 RM 都返回可以提交,那么向所有 RM 发送 Commit 命令,完成一次事务操作。

MySQL 如何实现 XA 规范


MySQL 中 XA 事务有两种情况,内部 XA 和外部 XA,其区别是事务发生在 MySQL 服务器单机上,还是发生在多个外部节点间上。

内部 XA
在 MySQL 的 InnoDB 存储引擎中,开启 binlog 的情况下,MySQL 会同时维护 binlog 日志与 InnoDB 的 redo log,为了保证这两个日志的一致性,MySQL 使用了 XA 事务,由于是在 MySQL 单机上工作,所以被称为内部 XA。

内部 XA 事务由 binlog 作为协调者,在事务提交时,则需要将提交信息写入二进制日志,也就是说,binlog 的参与者是 MySQL 本身。

外部 XA
外部 XA 就是典型的分布式事务,MySQL 支持 XA START/END/PREPARE/Commit 这些 SQL 语句,通过使用这些命令,可以完成分布式事务。

MySQL 外部 XA 主要应用在数据库代理层,实现对 MySQL 数据库的分布式事务支持,例如开源的数据库中间层,比如淘宝的 TDDL、阿里巴巴 B2B 的 Cobar 等。外部 XA 一般是针对跨多 MySQL 实例的分布式事务,需要应用层作为协调者,比如我们在写业务代码,在代码中决定提交还是回滚,并且在崩溃时进行恢复。

 

Binlog 中的 Xid
当事务提交时,在 binlog 依赖的内部 XA 中,额外添加了 Xid 结构,binlog 有多种数据类型,包括以下三种:

statement 格式,记录为基本语句,包含 Commit
row 格式,记录为基于行
mixed 格式,日志记录使用混合格式
不论是 statement 还是 row 格式,binlog 都会添加一个 XID_EVENT 作为事务的结束,该事件记录了事务的 ID 也就是 Xid,在 MySQL 进行崩溃恢复时根据 binlog 中提交的情况来决定如何恢复。

Binlog 同步过程

image (1).png

当有事务提交时:

第一步,InnoDB 进入 Prepare 阶段,并且 write/sync redo log,写 redo log,将事务的 XID 写入到 redo 日志中,binlog 不作任何操作;


第二步,进行 write/sync Binlog,写 binlog 日志,也会把 XID 写入到 Binlog;


第三步,调用 InnoDB 引擎的 Commit 完成事务的提交,将 Commit 信息写入到 redo 日志中。


如果是在第一步和第二步失败,则整个事务回滚;如果是在第三步失败,则 MySQL 在重启后会检查 XID 是否已经提交,若没有提交,也就是事务需要重新执行,就会在存储引擎中再执行一次提交操作,保障 redo log 和 binlog 数据的一致性,防止数据丢失。

基于 XA 事务协议,用代码实现一个二阶段分布式事务 在具体的 Demo 之前,先来补充一点 XA 事务的知识:DTP 模型与 XA 规范。 DTP 模型与 XA 规范是由 X/Open 维护,也就是现在的 open group,官方网址:http://www.opengroup.org/。open group 是一个独立的组织,主要负责制定各种行业技术标准。由各大知名公司或者厂商进行支持,主要有如下公司: open group 目前有... 阅读详情

相关推荐

MySQL 数据库如何实现 XA 规范?

我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案,在前面的内容中提到过 binlog 的同步,其实是 MySQL XA 规范的一个应用,那么 XA 规范是如何定义的,具体又是如何应用的呢? 今天我们一起来看一下 XA 规范相关的内容。 MySQL 有哪些一致性日志 MySQL 数据库断电了,未提交的事务怎么办? 答案是依靠日志,因为在执行一个操作之前,数据库会首先把这个操作的内容写入到文件系统日志里记录起来,然后再进行操作。当宕机或者断电的时候,即使

805

分布式事务解决方案:XA规范

XA规范 二阶段提交协议是一个协议,而XA规范是X/Open 组织针对二阶段提交协议的实现做的规范。目前几乎所有的主流数据库都对XA规范提供了支持。 这样做的好处是方便多个资源(如数据库,应用服务器,消息队列等)在同一个事务中访问。你可以类比JDBC 我们这篇文章就以MySQL XA为例演示一下XA怎么玩? MySQL XA常用的命令如下 命令 解释 XA START xid 开启一个事务,并将事务置于ACTIVE状态,此后执行的SQL语句都将置于该事务中 XA END xid 将事务.

小识的博客 2037

保姆级教程:在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV(从BIOS到虚拟机配置)

本文提供在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV的详细教程,涵盖BIOS设置、固件配置、驱动优化及虚拟机部署。通过SR-IOV技术,显著提升虚拟化环境中的网络性能,适用于高性能计算、AI训练等场景。

weixin_26934905的博客 455

分布式事务----XA规范与AT规范

XA规范是X/Open组织定义的分布式事务处理(DTP,Distributed Transaction Processing)〉标准,XA规范描述了全局的TM与局部的RM之间的接口,几乎所有主流的关系型数据库都对xA规范提供了支持。

g40585的博客 577

网络安全隔离技术解析:单向网闸与双向网闸的核心差异与应用场景

本文深入解析网络安全隔离技术中的单向网闸与双向网闸,详细比较两者的核心差异与应用场景。单向网闸通过物理隔离确保数据单向流动,适用于金融交易等高风险场景;双向网闸则支持严格安检的双向数据交互,常见于医疗、政务等领域。文章还提供了选型建议和技术发展趋势,帮助读者根据安全需求和业务场景选择最适合的网闸解决方案。

weixin_29323365的博客 529

Comfy UI实战:如何用Checkpoint和Lora打造超写实人像(附完整工作流)

本文详细介绍了如何利用Comfy UI结合Checkpoint基础模型和Lora微调模型,打造超写实人像生成系统。从核心模型选择、工作流架构设计到提示词工程和参数优化,提供了一套完整的实战指南,帮助创作者提升AI绘画的专业水准和效率。

weixin_29032489的博客 462

Mysql如何实现XA规范

XA是分布式事务处理中的一个标准接口,用于协调多个参与方(如数据库、消息队列等)的事务处理。XA全称为eXtended Architecture,它定义了一套标准的接口和协议,用于实现分布式事务的提交和回滚。XA规范通过定义事务管理器和资源管理器之间的接口协议,实现了分布式事务的数据一致性和可靠性,但也存在一定的性能开销和复杂性。在设计和实施分布式系统时,需要仔细权衡利弊,选择适合的事务处理方式。

qq_39939541的博客 1089

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 818

分布式事务之DTP(XA规范)

DTP、XA、Atomikos、分布式事务XA规范

jannal专栏 966

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 407

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2978

架构思维:MySQL 数据库实现 XA 规范原理解析

MySQL中的XA规范是两阶段提交(2PC)协议的重要实现,分为内部XA和外部XA两种形式。内部XA用于保障Binlog与Redo Log的一致性,通过XID关联事务状态,确保崩溃恢复时数据一致(以Binlog为准)。外部XA支持跨数据库实例的分布式事务,由应用层作为协调者,通过XA接口协调多个资源管理器。内部XA对开发者透明,而外部XA需要显式调用XA接口实现跨库事务管理,两者共同确保MySQL在分布式场景下的数据一致性。

小工匠 1199

Android 10.0 kenel中修改rom系统内部存储的大小

在10.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出修改

安卓兼职framework和app工程师的博客 1406

规范介绍及Mysql底层实现机制数据库分布式事务XA

1. 引言 分布式事务主要应用领域主要体现在数据库领域、微服务应用领域。微服务应用领域一般是柔性事务,不完全满足ACID特性,特别是I隔离性,比如说saga不满足隔离性,主要是通过根据分支事务执行成功或失败,执行相应的前滚的重试或者后滚的补偿操作来达成全局事务的最终一致性,但是全局事务与全局事务之间没有隔离性。 笔者了解到的分布式事务方案有2PC的XA规范,以及Google 的percolator方案(TiDB就采用这个实现,本质上是基于全局时间戳的乐观锁版本校验)。 mysql的XA应用场景分为外部

kankana10的博客 243

K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

🔴 K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ShardingSphere XA事务无法恢复问题定位

在测试 ShardingSphere-Proxy 使用达梦数据库开启 XA 事务进行压测期间,kill 掉达梦数据库,等一段时间再重启达梦数据库,最终未完成的 XA 事务无法恢复,数据产生不一致。查看达梦上的 xid 一直有残留,没有被处理。使用 ShardingSphere-Proxy 结合其他主流数据库进行测试时无该问题。通过日志可以看到在压测期间,挂掉达梦数据库之后,有大量连接报错。节选错误日志如下:持续观察日志,能够看到 xa recover 查询出来的 xid 在不断增多。

flyingzc的博客 1667

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL实现XA规范

XA规范 XA 是由 X/Open 组织提出的分布式事务规范,XA 规范主要定义了事务协调者(Transaction Manager)和资源管理器(Resource Manager)之间的接口。 事务协调者(Transaction Manager),因为 XA 事务是基于两阶段提交协议的,所以需要有一个协调者,来保证所有的事务参与者都完成了准备工作,也就是 2PC 的第一阶段。如果事务协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交,也就是 2PC 的第二阶段。 ...

skh2015java的博客 551

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql xa 实现_MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务5.1 XA协议首先我们来简要看下分布式事务处理的XA规范image.png可知XA规范中分布式事务有AP,RM,TM组成:其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去...

weixin_39915171的博客 220

MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务5.1 XA协议首先我们来简要看下分布式事务处理的XA规范可知XA规范中分布式事务有AP,RM,TM组成:其中应用程序(Ap...

技术原始积累 186

mysql分布式事务_MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务5.1 XA协议首先我们来简要看下分布式事务处理的XA规范image.png可知XA规范中分布式事务有AP,RM,TM组成:其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去...

weixin_36183945的博客 152

MySQL XA是如何实现分布式事务的?

提到 XA 规范,就不得不说 DTP 模型( Distributed Transaction Processing),因为 XA 规范约定的是 DTP 模型中 2 个模块(事务管理器和资源管理器)的通讯方式,那 DTP,就是分布式事务处理,就像下图的样子:为了更好的理解 DTP 模型,来解释一下 DTP 各模块的作用。

qq_37756660的博客 1248
上一篇: MySQL执行计划介绍
下一篇: 简述Java内存模型(JMM)
王大zhuang
博客等级 码龄11年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值