一、MySQL数据库分布式事务
InnoDB引擎支持XA事务,并通过XA事务来支持分布式事务的实现。分布式事务是是指允许多个独立的事务资源(transactional resources)参与一个全局事务中,在使用分布式事务,InnoDB存储引擎的事务隔离级别必须 为serializable。
XA事务由一个或多个资源管理器(Resource Manager)、一个事务管理器(Transaction Manager)以及一个应用程序组成。
• 资源管理器:提供访问事务资源的方法。通常一个数据库就是一个资源管理器
• 事务管理器:协调参与全局事务中的各个事务,需要和参与全局事务的所有资源管理器通信。
• 应用程序:定义事务的边界,指定全局事务中的操作。
在MySQL数据库的分布式事务中,资源管理器就是MySQL数据库,事务管理器为连接MySQL的客户端。如下图:
分布式事务使用两段式提交(two-phase commit)的方式。第一阶段,所有参与全局事务的节点开始准备 ,告诉事务管理器它们准备提交了。第二阶段,事务管理器告诉资源管理器执行的是commit或rollback操作。如果一个节点不能提交,则所有节点都都被告知需要回滚。
XA事务的语法:
XA {START|BEGIN} xid [JOIN|RESUME]
XA END xid[SUSPEND]FOR MIGRATE]]
XA PREPARE xid
XA COMMIT xid [ON PHASE]
XA ROLLBACK xid
XA RECOVER
通过查看参数innodb_support_xa确认是否支持XA事务,默认ON。
二、内部XA事务
存在在存储引擎和插件/存储引擎之间的事务叫内部XA事务。常见的内部XA事务是binlog和innodb引擎之间。
参考《MySQL技术内幕 -InnoDB存储引擎》整理,如侵权请联系vinin@163.com。