
多个数据库的事务统一失败回滚,成功。
两个情况
编辑
删除
1、两个事务做成一个事务去做处理。强一致性
2、短暂的不一致性,例如定时批量处理不一致的数据,业务补偿冲正。

角色AP ,多个资源RM(MYSQL),事务管理器(TM)
AP 发起一个全局事务,事务管理器再去通知RM
核心6个操作。
1、开启事务,取消事务,准备提交,提交事务,回滚事务,获取需要恢复的事务。
mysql 5.0 就支持XA事务。


执行状态图。
1、XA Start 事务进入Active 状态,sql 全部执行完,XA END命令。
2、END进入空闲状态,可以使用XA Commit 提交,或者XA Prepare 进入准备状态,然后可以提交或者回滚。
注意:XA 和非XA事务互斥,已经执行了XA Start,本地事务就不会启动。
完整事务流程:
1、AP 启动一个全局事务,事务管理器生成事务 ID。
2、事务管理器开启所有mysql 的RM 的分布式事务。
3、AP要提交,通知事务管理器执行XA END ,MYSQL进入XA PREPARE 状态,这时所有都Prepare ok,TM才会commit成功,如果则发送rollback给所有MYSQL。

3、某个RM 奔溃,TM会重发commit操作,直到成功为止。
5.6版本以及之前的, prepare状态不记录bin_log,所有XA是有bug的
atomikos 和narayana 的区别,日志支持存储到某个数据库。
1、极端要求数据实时一致性,调整隔离级别到串行化。
2、TM发生故障,会导致事务操作失败,所以要考虑tm的高可用。
3、数据不一致,commit 网络抖动故障,设置监控报警通知人工处理,重新发送commit操作。
