MySQL5.0.3开始支持分布式事务,只支持InnoDB引擎。
 1. 分布式事务原理
   使用分布式事务的应用程序涉及一个或多个资源管理器和一个事务管理器。
    资源管理器(RM)用于提供通向事务资源的途径,数据库服务器是一种资源管理器。该管理器必须可以提交或回滚由RM管理的事务。
    事务管理器(TM)用于协调作为一个分布式事务一部分的事务。TM与管理每个事务的RMs进行通信。在一个分布式事务中,各个单个事务均是分布式事务的“分支事务”。分布式事务和各分支通过一种命名方法进行标识。
    用于执行分布式事务的过程使用两阶段提交,发生时间在由分布式事务的各个分支需要进行的行动已经被执行之后。
    第一阶段,TM告知分支事务预备好提交,用于管理分支RM会记录分支行动,分支会指示是否可以提交,这个指示会用在第二个阶段。
    第二阶段,TM告知RMs是否提交或回滚。所有分支指示可以提交,则所有分支被告知提交,有任何分支指示不能提交则所有分支被告知回滚。
    2.分布式事务语法
      分布式事务(XA事务)的SQL语法主要包括:
        XA {START|BEGIN} xid     启动一个XA事务 (xid 必须是一个唯一值; )    
        XA END xid    结束一个XA事务 
XA PREPARE xid    准备
XA COMMIT xid [ONE PHASE]    提交XA事务
XA ROLLBACK xid  回滚XA事务
XA RECOVER   查看处于PREPARE 阶段的所有XA事务


事务标识符xid
xid 是一个XA事务标识符,它由客户端提供或者有mysql服务器生成。
xid的格式一般为 xid : gtrid [, bqual [, formatID]] ;
gtrid是一个分布式事务标识符,
bqual是一个分支限定符,默认是空串

formatID是一个数字,用于标识由gtrid和bqual值使用的格式,默认值是1。

mysql 分布式架构 mysql实现分布式事务_资源管理器

mysql 分布式架构 mysql实现分布式事务_资源管理器_02

3.存在的问题
      如果分布式在达到prepare状态时,数据库异常重新启动,服务器重新启动后,可以继续对分支事务进行提交或者回滚操作,但是提交的事务没有写binlog,可能导致使用binlog恢复丢失部分数据。如果存在复制的数据库,有可能导致主从的护具库的数据不一致。