Content #
- 创建一个唯一的事务 ID(比如 xid),来唯一标识事务,并调用“XA START”
和“XA END”来定义事务分支对应的操作: (比如 INSERT into operation_table SET id = 100, op = ‘get-cdn-log’)。
- 执行“XA PREPARE”命令,来执行二阶段提交协议的提交请求阶段。
- 调用“XA COMMIT”来提交事务(或者“XA ROLLBACK”回滚事务)。这样就实现了全局事务的一致性了。
可以看到,客户端在扮演事务管理器的角色,而 MySQL 数据库就在扮演资源管理器的角色。
如果你要开启 MySQL 的 XA 功能,必须设置存储引擎为 InnoDB。
能否将“XA END”和“XA PREPARE”合并到一起呢?答案是不能,因为在“XA END”之后,是可以直接执行“XA COMMIT”的,也就是一阶段提交(比如当共享资源变更只涉及到一个 RM 时)。
MySQL XA 性能不高,适合在并发性能要求不高的场景中使用。