1、mysql分布式事务
在mysql中,使用分布式事务的应用程序涉及一个或多个资源管理器和一个事务管理器,分布式事务的事务参与者、资源管理器、事务管理器等位于不同的节点上。这些不同的节点相互协作共同完成一个具有逻辑完整性的事务。分布式事务主要作用在与确保事务的一致性和完整性。
1.1、了解分布式事务的原理
资源管理器(RM):用于向事务提供资源,同时还具有管理事务提交和回滚的能力。数据库就是一种资源管理器。
事务管理器(TM):用于和每个资源管理器通信,协调并完成事务的处理。一个分布式事务中各个事务均是分布式事务的“分支事务”。分布式事务和各个分支通过一种命名方法进行标识。
1.2、分布式事务的语法
执行分布式事务的语法:
XA {START|BEGIN} xid [JOIN|RESUME]
XA START xid表示用于启动一个事务标识为xid的事务。xid分布式事务表示的值既可以由客户端提供,也可以由mysql服务器生成。
结束分布式事务的语法:
XA END xid [SUSPEND [FOR MIGRATE]]
其中xid包括gtrid[,[bqual [,formatID ]],含义如下:
- gtrid是一个分布式事务标识符
- bqual表示一个分支限定符,默认值是空字符串。对于一个分布式事务中的每个分支事务,bqual值必须是唯一的。
- formatID是一个数字,用于表示有gtrid和bqual值使用的格式,默认值是1
XA PREPARE xid:所有的分支被预备。它们被事务管理器告知要准备提交,每个分支资源管理器记录分支的行动并指示任务的可行性。
XA COMMIT xid [ONE PHASE]:提交具体的分支事务
XA ROLLBACK xid:回滚具体的分支事务(分支事务被实际地提交或者回滚)
XA RECOVER:返回数据库中处于PREPARE状态的分支事务的详细信息。
MySQL分布式分为两类:
- .内部分布式事务。用于同一个实例下跨多个数据引擎的事务,由二进制日志作为协调者
- 外部分布式事务:跨多个mysql实例的分布式事务,需要应用层介入作为协调者,全局提交还是回滚,都是由应用层决定的。对应用层的要求比较高。