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 db1session2 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

 

转载于:https://www.cnblogs.com/ssskkk/p/9206481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值