Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.3.8 XA 事务

支持XA事务的实现基于X/Open CAE文档《分布式事务处理:XA规范》。该文档由The Open Group出版,地址为http://www.opengroup.org/public/pubs/catalog/c193.htm。当前XA实现的限制在第15.3.8.3节,“XA事务限制”中描述。

在客户端,没有特殊要求。XA接口到MySQL服务器由SQL语句组成,语句以XA关键字开头。MySQL客户端程序必须能够发送SQL语句,并理解XA语句接口的语义。它们不需要链接到最新的客户端库。更老的客户端库也可以工作。

MySQL Connector/J 5.0.0 及更高版本支持XA,通过一个类接口来处理XA SQL 语句接口。

XA支持分布式事务,即允许多个独立的事务资源参与一个全局事务。事务资源通常是关系数据库,但也可能是其他资源类型。

全局事务涉及多个事务资源,它们都必须成功完成或回滚。事实上,这扩展了ACID属性,使得多个ACID事务可以并发执行作为一个全局操作的组件,该操作也具有ACID属性。 (与非分布式事务一样,SERIALIZABLE可能是应用程序敏感的读取现象。如果应用程序敏感读取现象,REPEATABLE READ可能不够用。)

一些分布式事务示例:

  • 应用程序可能作为集成工具,结合消息服务和关系数据库。应用程序确保发送、检索和处理消息的事务都在一个全局事务中。你可以认为这是“事务邮件

  • 一个应用程序执行涉及不同数据库服务器的操作,例如 MySQL 服务器和 Oracle 服务器(或多个 MySQL 服务器),其中涉及多个服务器的操作必须作为全局事务的一部分,而不是每个服务器的本地事务。

  • 一家银行在关系数据库管理系统(RDBMS)中存储账户信息,并通过自动取款机(ATM)分配和接收资金。为了确保 ATM 操作正确反映在账户中,但这不能单独使用 RDBMS。全局事务管理器集成 ATM 和数据库资源,以确保金融事务的一致性。

使用全局事务的应用程序涉及一个或多个资源管理器和事务管理器:

  • 资源管理器(RM)提供对事务资源的访问。数据库服务器是一种资源管理器。RM 必须能够将事务提交或回滚。

  • 事务管理器(TM)协调全局事务中的事务。它与每个事务的 RM 通信。全局事务中的每个事务称为“分支”全局事务和其分支通过后续描述的命名方案进行标识。

MySQL 实现了 XA,允许 MySQL 服务器作为资源管理器,处理 XA 事务,并在全局事务中。连接到 MySQL 服务器的客户端程序作为事务管理器。

执行全局事务需要知道参与的组件,并将每个组件带到可以提交或回滚的状态。根据每个组件对成功的报告,他们必须像原子组一样提交或回滚。也就是说,所有组件都必须提交,或者所有组件都必须回滚。为了管理全局事务,需要考虑任何组件或连接网络可能会失败。

执行全局事务使用两阶段提交(2PC)。这发生在全局事务的分支执行完毕后。

  1. 在第一阶段,所有分支都被准备好了。这意味着每个 RM 都将分支的操作记录到稳定存储中。分支表明它们是否能够这样做,这些结果将用于第二阶段。

  2. 在第二阶段,TM 告诉 RMs 是否提交或回滚。如果所有分支在准备时表明它们能够提交,所有分支都被告知提交。如果任何分支在准备时表明它不能提交,所有分支都被告知回滚。

在某些情况下,全局事务可能使用一阶段提交(1PC)。例如,当事务管理器发现全局事务只包含一个事务资源(即单个分支)时,那个资源可以同时被告知准备和提交。