通过MySQL XA实现分布式事务

通过MySQL XA实现分布式事务

Content #

  1. 创建一个唯一的事务 ID(比如 xid),来唯一标识事务,并调用“XA START”

和“XA END”来定义事务分支对应的操作: (比如 INSERT into operation_table SET id = 100, op = ‘get-cdn-log’)。

  1. 执行“XA PREPARE”命令,来执行二阶段提交协议的提交请求阶段。
  1. 调用“XA COMMIT”来提交事务(或者“XA ROLLBACK”回滚事务)。这样就实现了全局事务的一致性了。

可以看到,客户端在扮演事务管理器的角色,而 MySQL 数据库就在扮演资源管理器的角色。

如果你要开启 MySQL 的 XA 功能,必须设置存储引擎为 InnoDB。

能否将“XA END”和“XA PREPARE”合并到一起呢?答案是不能,因为在“XA END”之后,是可以直接执行“XA COMMIT”的,也就是一阶段提交(比如当共享资源变更只涉及到一个 RM 时)。

MySQL XA 性能不高,适合在并发性能要求不高的场景中使用。

Viewpoints #

From #

加餐 | MySQL XA是如何实现分布式事务的?