MySQL分布式事物(XA事物)的使用
有时一个系统的数据 放在不同的库之中。如果用普通的事物 一个分支库提交成功了,另外一个分支库提交失败了,
这候 两个库没有同步的成功或者失败。会导致系统数据的不完整。
对于处理这种情况 MySQL有了处理分布式(XA)事物的语法
XA START xid 用于启动一个带给定xid的XA事物。
xid包含3个部分 gtrid,bqual,formatID
- gtrid 是一个分布式事物的标识符,一个分布式事物的每个XA事物的gtrid必须相同,这样可以明确知道每个XA事物属于哪个分布式事物。
- bqual 是一个分支限定符,一个分布式事物的所每个XA事物的bqual值必须不同。
- formatID 是一个数字,用于标识由gtrid和bqual值使用的格式,可以不写 默认是1 。
分布式的关键在于如何确保分布式事物的完整性,以及在某个分支出现问题时的故障解决。
XA事物的相关命令就是提供给应用如何在多个独立的数据库之间进行分布式事物的管理,包括启动一个分支事物,使事物进入准备阶段以及事物的实际提交回滚操作等。
| session1 in db1 | session2 in db2 |
| xa start 'gtridtest','bqualdb1' 数据库db1中启动一个分布式事物的一个分支 | xa start 'gtridtest','bqualdb2'数据库db2中启动一个分布式事物的一个分支 |
| update db1_table1 set content = '测试' where id =1; | update db2_table1 set content = '实验' where id =1; |
| xa end 'gtrid _test','bqual_db1' 第一阶段提交 | xa end 'gtrid _test','bqual_db2' 第一阶段提交 |
| xa prepare 'gtrid _test','bqual_db1' 进入prepare状态 | xa prepare 'gtrid _test','bqual_db2'进入prepare状态 |
| 两个事物都进入准备提交阶段,如果之前遇到任何错误 会回滚所有分支 xa recover 命令可以查看PREPARE状态下的事物(建议大家去亲自测试) | |
| xa commit 'gtrid _test','bqual_db1' | xa commit 'gtrid _test','bqual_db2' |
| 一旦开始提交操作 则需要保证全部的分支都要提交成功 如果失败 请看文章结尾 | |
如果分支事物达到prepare状态的时,遇到断电等异常。服务器重新启动之后(xa recover可以查到未完成的prepare状态下的XA事物),可以继续对分支 进行回滚或者提交操作 ;
这么看 其实分布式事物也不是完美的 xa事物prepare之后遇到异常不会自动回滚,需要手动进行回滚或者提交。
javax.transaction.xa包 是jdbc控制MySQL XA事物的API
MySQL分布式事物(XA事物)的使用的更多相关文章
- 详解Mysql分布式事务XA(跨数据库事务)
详解Mysql分布式事务XA(跨数据库事务) 学习了:http://blog.csdn.net/soonfly/article/details/70677138 mysql执行XA事物的时候,mysq ...
- MySQL数据库分布式事务XA优缺点与改进方案
1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...
- MySQL 中基于 XA 实现的分布式事务
1 XA协议 首先我们来简要看下分布式事务处理的XA规范可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务 ...
- DTP模型之一:(XA协议之三)MySQL数据库分布式事务XA优缺点与改进方案
1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...
- 数据库分布式事务XA规范介绍及Mysql底层实现机制
1. 引言 分布式事务主要应用领域主要体现在数据库领域.微服务应用领域.微服务应用领域一般是柔性事务,不完全满足ACID特性,特别是I隔离性,比如说saga不满足隔离性,主要是通过根据分支事务执行成功 ...
- Mysql数据库分布式事务XA详解
XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...
- ## 【分布式事务】面试官问我:MySQL中的XA事务崩溃了如何恢复??
写在前面 前段时间搭建了一套MySQL分布式数据库集群,数据库节点有12个,用来测试各种分布式事务方案的性能和优缺点.测试MySQL XA事务时,正当测试脚本向数据库中批量插入数据时,强制服务器断电! ...
- 分布式事务 XA 两段式事务 X/open CAP BASE 一次分清
分布式事务: 分布式事务是处理多节点上 的数据保持 类似传统 ACID 事物特性的 一种事物. XA:是一种协议,一种分布式事务的协议,核心思想是2段式提交. 1 准备阶段 2 提交阶段.XA协议是 ...
- Mysql分布式事务
关于Mysql分布式事务介绍,可参考:http://blog.csdn.net/luckyjiuyi/article/details/46955337 分为两个阶段:准备和执行阶段.有两个角色:事务的 ...
随机推荐
- C/C++字符串函数使用整理
#strlen+功能:求字符串长度.+说明:strlen(a) 函数类型常为int,返回字符串长度大小,参数为字符数组名,也可为字符串和指向字符串的指针.+使用样例: char a[ ]={" ...
- laravel-重定向携带自定义消息
在控制器写: return redirect(route('member_create'))->with('success', '操作成功'); //指定到路由名member_create // ...
- STS中logback.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...
- Web开发的小知识点
ServletConfig:用于读取配置文件信息 ServletContext:这是一个容器,代表一个web应用程序,多个Servlet可以通过这个容器共享数据信息(注意:这样的数据共享有线程安全问题 ...
- 对 JSON 数据进行序列化和反序列化
如何:对 JSON 数据进行序列化和反序列化 2017/03/30 作者 JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间 ...
- thymeleaf拆分头部(head)显示异常问题
问题描述: 刚用thymeleaf不久,考虑到公共头部的导入css,js代码,需要拆分. 拆分之后,bootstrap-select下拉多选框出现“样式异常”,本认为是头部拆分问题,css样式未导入成 ...
- 【Python】【BugList13】req = requests.get(url=target)报错: (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)')
[代码] # -*- coding:UTF-8 -*- import requests if __name__ == '__main__': target = 'https://unsplash.co ...
- C# MVC验证Model
.NET Core MVC3 数据模型验证的使用 这里我先粘贴一个已经加了数据验证的实体类PeopleModel,然后一一介绍. using System; using System.Collecti ...
- 深入理解java虚拟机(三)-----类加载机制
类加载机制jvm把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被jvm直接使用的java类型.在java中,类型的加载.连接和初始化都是在程序运行期间完成的 ...
- PowerShell工作流学习-7-编写脚本工作流帮助
关键点: a)工作流中不支持基于注释的帮助(标识工作流的帮助文件的 .ExternalHelp 注释除外). b)支持get-help参数的方式:使用 .ExternalHelp 注释以便 Get-H ...