文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文搞懂MySQL XA如何实现分布式事务

2024-04-02 19:55

关注

前言

MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开发一个业务系统,它接受外部的请求,然后访问多个内部其它系统才能执行该请求。执行时我们需要同时更新多个数据库的值(D1,D2,D3)。由于系统必须处于一个一致性,也就是这三个数据库的值要么同时更新成功,要么全部不更新。不然会造成子系统有些指令成功了,有些指令尚未执行。导致对结果理解混乱。

那么,MySQL如何实现多个MySQL数据库更新的一致性呢?那就是MySQL XA。MySQL正是靠支持XA规范的二阶段提交协议,才实现了多个数据库的操作。

XA 协议

提到XA规范就得来聊一下DTP模型(Distributed Transaction Processing)。XA规范就是约定DTP模型中的两个模块事务管理器和资源管理器的通讯方式。DTP其实就是分布式事务处理

在这里插入图片描述

各个模块的作用如下:

刚开始看可能觉得不好理解,总结起来该架构就是应用程序访问及使用资环管理器提供的共享资源,通过事务管理器提供的事务接口(TX interface)定义事务操作。事务管理器和资源管理会基于XA规范执行二阶段提交协议。
XA规范流程如下图所示

在这里插入图片描述

如何通过MySQL XA实现分布式事务

Mysql中存在两种XA事务,一种是内部XA事务主要用来协调存储引擎和二进制日志,一种是外部事务可以参与到外部分布式事务中(比如多个数据库实现的分布式事务),这里我们主要讨论外部事务。

注:MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。
MySQL的XA语法如下


XA {START|BEGIN} xid [JOIN|RESUME]
XA PREPARE xid
XA END xid
XA COMMIT xid[ONE PHASE]
XA ROLLBACK xid
XA RECOVER[CONVERT XID ]

其中xid作为事务ID,唯一表示一个事务分支,每个事务分支都有一个id。
首先要确认是否开启了XA 功能

在这里插入图片描述

设置隔离级别为serializable

在这里插入图片描述

执行结果

在这里插入图片描述

首先调用“XA START ‘xid' ”命令把XA事务置于ACTIVATE状态,接着执行构成事务的多条SQL语句(比如 update
t1 set c1 = ‘a' where id=1),也就是指定事务的边界。然后调用“XA END ‘xid' ”把事务放入IDLE状态,也就是结束事务边界。

在这里插入图片描述

接着,对于一个处于IDLE状态的XA事务,可以执行“XA PREPARE”命令或一个“XA COMMIT…ONE PHASE”命令,XA
PREPARE来执行二阶段提交协议的提交请求阶段。执行“XA RECOVER”命令会列出处于PREPARED状态的所有XA事务。XA
COMMIT…ONE PHASE用于预备和提交事务,也就是转换为一阶段协议,直接提交事务。

在这里插入图片描述

最后,调用“XA COMMIT”来提交事务(或者“XA ROLLBACK”回滚事务)。这样就实现了全局事务的一致性了。

在这里插入图片描述

通过上面的流程可以看到,在MySQL数据库分布式事务中,MySQL的角色其实是XA事务过程中的RM,TM是连接MySQL服务器的客户端。在分布式事务中一般会涉及到至少两个RM,所以我们说的MySQL支持XA协议是说mysql作为RM来说的,也就是说MySQL实现了XA协议中RM应该具有的功能。

到此这篇关于一文搞懂MySQL XA如何实现分布式事务的文章就介绍到这了,更多相关MySQL XA分布式事务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯