Documentation Home

13.3.7.3 XA 交易的限制

XA 事务支持仅限于 InnoDB存储引擎。

对于外部 XA,MySQL 服务器充当资源管理器,客户端程序充当事务管理器。对于内部 XA,MySQL 服务器中的存储引擎充当 RM,而服务器本身充当 TM。内部 XA 支持受限于各个存储引擎的能力。处理涉及多个存储引擎的 XA 事务需要内部 XA。内部 XA 的实现要求存储引擎在表处理程序级别支持两阶段提交,目前仅适用于InnoDB.

对于XA STARTJOINRESUME子句被识别但没有效果。

因为XA ENDSUSPEND [FOR MIGRATE] 条款被承认但没有效力。

全局事务中每个 XA 事务的bqual部分值都不同 的要求是当前 MySQL XA 实现的限制。xid它不是 XA 规范的一部分。

如果一个XA事务已经达到PREPARED 状态,MySQL服务器被kill掉(比如Unix上用 kill -9)或者异常关闭,那么事务可以在服务器重启后继续执行。但是,如果客户端重新连接并提交事务,即使事务已提交,二进制日志中也不存在该事务。这意味着数据和二进制日志不同步。这意味着 XA 不能与复制一起安全使用。

服务器有可能回滚挂起的 XA 事务,即使是已达到该 PREPARED状态的事务。如果客户端连接终止而服务器继续运行,或者如果客户端已连接并且服务器正常关闭,则会发生这种情况。(在后一种情况下,服务器将每个连接标记为终止,然后回滚PREPARED 与其关联的 XA 事务。)提交或回滚PREPAREDXA 事务应该是可能的,但如果不更改二进制文件则无法完成记录机制。

FLUSH TABLES WITH READ LOCK与 XA 事务不兼容。