支持XA事务可用于InnoDB
存储引擎。MySQL XA实现基于X/Open CAE文档分布式事务处理:XA规范。本文档由The Open Group发布,可在http://www.opengroup.org/public/pubs/catalog/c193.htm。中描述了当前XA实现的局限性第13.3.8.3节“XA交易的限制”。
在客户端,没有特殊的要求。到MySQL服务器的XA接口由以XA
关键字。MySQL客户端程序必须能够发送SQL语句并理解XA语句接口的语义。它们不需要链接到最近的客户端库。旧的客户端库也可以工作。
在MySQL连接器中,MySQL连接器/J 5.0.0及更高版本通过为您处理XA SQL语句接口的类接口直接支持XA。
XA支持分布式事务,即允许多个独立的事务资源参与全局事务的能力。事务资源通常是rdbms,但也可能是其他类型的资源。
一个全局事务涉及几个本身是事务性的操作,但是所有操作必须要么作为一个组成功完成,要么作为一个组全部回滚。本质上,这扩展了ACID的特性”上一个台阶”因此,多个ACID事务可以作为全局操作的组件一起执行,该全局操作也具有ACID属性。(与非分布式事务一样,可序列化的
如果您的应用程序对读取现象敏感,则可能是首选。可重复读取
对于分布式事务可能还不够。)
一些分布式事务的例子:
应用程序可以作为集成工具,将消息传递服务与RDBMS结合起来。应用程序确保处理消息发送、检索和处理的事务(也涉及事务数据库)都发生在全局事务中。你可以把它想成”事务性的邮件。”
应用程序执行涉及不同数据库服务器的操作,例如MySQL服务器和Oracle服务器(或多个MySQL服务器),其中涉及多个服务器的操作必须作为全局事务的一部分发生,而不是作为每个服务器本地的单独事务发生。
银行将账户信息保存在RDBMS中,并通过自动柜员机(atm)分配和接收资金。有必要确保ATM操作正确地反映在帐户中,但仅靠RDBMS无法做到这一点。全局事务管理器集成了ATM和数据库资源,以确保金融事务的整体一致性。
使用全局事务的应用程序包括一个或多个资源管理器和一个事务管理器:
资源管理器(RM)提供对事务资源的访问。数据库服务器是一种资源管理器。必须能够提交或回滚RM管理的事务。
事务管理器(Transaction Manager, TM)协调作为全局事务一部分的事务。它与处理每一个事务的rm通信。全局事务中的各个事务是”分支机构”全局事务的。全局事务及其分支由后面描述的命名方案标识。
XA的MySQL实现使MySQL服务器能够充当一个资源管理器,在全局事务中处理XA事务。连接到MySQL服务器的客户端程序充当事务管理器。
要执行全局事务,必须知道涉及哪些组件,并将每个组件设置到可以提交或回滚的位置。根据每个组件对其成功能力的报告,它们必须作为一个原子组全部提交或回滚。也就是说,要么所有组件都必须提交,要么所有组件都必须回滚。要管理全局事务,必须考虑到任何组件或连接网络都可能失败。
执行全局事务的过程使用两阶段提交(2PC)。这发生在全局事务的分支执行的操作被执行之后。
在第一阶段,准备好所有分支。也就是说,TM告诉他们要做好承诺的准备。通常,这意味着管理分支的每个RM将分支的操作记录在稳定存储中。分支表明它们是否能够做到这一点,这些结果将用于第二阶段。
在第二阶段,TM告诉rm是提交还是回滚。如果所有分支在准备就绪时表明它们能够提交,则所有分支都被告知提交。如果任何分支在准备时指出它无法提交,则所有分支都被告知回滚。
在某些情况下,全局事务可能使用单阶段提交(1PC)。例如,当事务管理器发现全局事务仅由一个事务资源(即单个分支)组成时,可以通知该资源同时准备和提交。