XA 事务支持仅限于
InnoDB
存储引擎。
对于“外部 XA ”,MySQL 服务器充当资源管理器,客户端程序充当事务管理器。对于“内部 XA ”,MySQL 服务器中的存储引擎充当 RM,而服务器本身充当 TM。内部 XA 支持受限于各个存储引擎的能力。处理涉及多个存储引擎的 XA 事务需要内部 XA。内部 XA 的实现要求存储引擎在表处理程序级别支持两阶段提交,目前仅适用于InnoDB
.
对于XA
START
,JOIN
和
RESUME
子句被识别但没有效果。
因为XA
END
该SUSPEND [FOR MIGRATE]
条款被承认但没有效力。
全局事务中每个 XA 事务的bqual
部分值都不同
的要求是当前 MySQL XA 实现的限制。xid
它不是 XA 规范的一部分。
如果一个XA事务已经达到PREPARED
状态,MySQL服务器被kill掉(比如Unix上用
kill -9)或者异常关闭,那么事务可以在服务器重启后继续执行。但是,如果客户端重新连接并提交事务,即使事务已提交,二进制日志中也不存在该事务。这意味着数据和二进制日志不同步。这意味着 XA 不能与复制一起安全使用。
服务器有可能回滚挂起的 XA 事务,即使是已达到该
PREPARED
状态的事务。如果客户端连接终止而服务器继续运行,或者如果客户端已连接并且服务器正常关闭,则会发生这种情况。(在后一种情况下,服务器将每个连接标记为终止,然后回滚PREPARED
与其关联的 XA 事务。)提交或回滚PREPARED
XA 事务应该是可能的,但如果不更改二进制文件则无法完成记录机制。
FLUSH TABLES WITH READ LOCK
与 XA 事务不兼容。