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 分为两个阶段:准备和执行阶段.有两个角色:事务的 ...
随机推荐
- php 守护进程(Daemon)
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务. 很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭. 守护进程一直在后台运行,脱离终端运行的程序 独立运行的守护进 ...
- redis get乱码
- 消息中间件和JMS介绍
在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...
- create-react-app创建项目并用git上传至GitHub及展示预览效果
1.在本地中创建一个项目所在的文件夹 2.npm -g create-react-app 3.在此文件夹下 create-react-app react-demo (项目名) 4.cd react-d ...
- 服务管理之samba
目录 samba 1.samba的简介 2. samba访问 1.搭建用户认证共享服务器 2.搭建匿名用户共享服务器 samba 1.samba的简介 Samba是在Linux和UNIX系统上实现SM ...
- idea出现找不到实体类
今天经理遇到一个很奇怪的问题: 在使用idea时,就是包真实存在,但是包中的实体类却无法智能提示,也无法导入成功: 我推荐的解决办法是重新导入,但是没有用,经理在网上找了很多解决方式,依然无效: 最后 ...
- java38
字符串内存分析 String str = new String("ABCD") 会先在堆中开辟一个空间,然后去常量池(方法区)中寻找是否有该变量,如果有,直接引用常量池中的内容 如 ...
- Java集合类的底层实现探索
List: ArrayList 首先我们来看看jdk的ArrayList的add方法的源码是如何实现的: public boolean add(E e) { ensureCapacityInterna ...
- php常用字符串方法
chop() 移除字符串右侧的空白字符或其他字符 ltrim() 移除字符串左侧的空白字符或其他字符 rtrim() 移除字符串右侧的空白字符或其他字符 tr ...
- NIOS II 之串口学习
UART中有6个寄存器分别为control, status, rxdata, txdata, divisor,endofpacket. 的寄存器是16位位宽的. UART会产生一个高电平的中断,当接收 ...