本机事务(transaction)
start transaction; // 开始一个事务 |
分布式事务(xa)
xa start 'test', 'db1'; -- 启动xid='text', 分支='db1'的分布式事务 |
DB1 | DB2 | |
---|---|---|
xa start ‘transxxx’ ‘db1’ | xa start ‘transxxx’ ‘db2’ | 开始事务 |
insert db1 .. | update db2 … | |
xa end ‘transxxx’ ‘db1’ | xa end ‘transxxx’ ‘db2’ | |
xa prepare ‘transxxx’ ‘db1’ | xa prepare ‘transxxx’ ‘db2’ | 进入Prepare阶段 |
xa commit ‘transxxx’ ‘db1’ | xa commit ‘transxxx’ ‘db2’ | 提交事务 |
命令说明:
- 开始事务:
xa start xid
, xid是某个分布式事务的唯一id, xid分三部分: 分布式事务标识+事务分支标识+formatid- 上面的例子只有 “分布式事务标识+事务分支标识”, 后者用db1/db2表示在不同库上的事务分支
- xa prepare:
- xa commit:
实现
@todo: MySQL分布式事务XA似乎用的是2PC ? 事务管理器组件 atomikos 的实现? @todo