MySQL中 XA事务解析
在数据库中,XA事务全称是 “eXtended Architecture Transaction”,即扩展架构事务。MySQL5.0.3版本开始支持 XA 分布式事务,并且只有InnoDB存储引擎支持XA事务。全局事务涉及多个本身具有事务性的操作,但所有操作都必须作为一个组成功完成,或者作为一个组合回滚。本质上,这将ACID属性“向上扩展”,以便多个ACID事务可以作为具有ACID属性的全局操作的组件协同执行。
1.使用全局事务的应用程序涉及一个或多个资源管理器和一个事务管理器:
- 资源管理器(RM)提供对事务性资源的访问。数据库服务器是一种资源管理器。必须能够提交或回滚RM管理的事务。
- 事务管理器(TM)协调作为全局事务一部分的事务。它与处理这些事务的RM进行通信。全局事务中的单个事务是全局事务的“分支”。全局事务及其分支由稍后描述的命名方案标识。
2.执行全局事务的过程使用两阶段提交(2PC,= PrePare+Commit ):
- 第一阶段,所有分支机构都已准备就绪。也就是说,TM告诉他们准备做出承诺。通常,这意味着管理分支的每个RM都会在稳定存储中记录分支的操作。分支指示它们是否能够做到这一点,这些结果用于第二阶段。
- 第二阶段,TM告诉RM是提交还是回滚。如果所有分支在准备就绪时都表示能够提交,则所有分支都会被告知提交。如果任何分支在准备时表示无法提交,则所有分支都会被告知回滚。
备注:在某些情况下,全局事务可能会使用单阶段提交(1PC)。例如,当事务管理器发现全局事务仅由一个事务资源(即单个分支)组成时,可以告诉该资源同时准备和提交。
3.MySQL中实现XA事务,使用MySQL服务够充当资源管理器,在全局事务中处理XA事务。连接到MySQL服务器的客户端程序充当事务管理器。