背景:
在日常开发中,为了保证数据的原子性、一致性和隔离性等特性,需要使用事务来控制SQL语句的执行和提交。例如在一个单元操作中,对一个数据库的多个表进行了一系列的增删改,为了保证多个表能够一致性的修改数据,同时不受其他mysql连接操作的影响,就需要使用事务。
对于单个数据库,可以直接使用mysql的事务进行事务控制,通过begin,commit和rollback等操作进行开启、回滚或提交事务。但是更加复杂的应用中,通常会出现同时修改多个数据源数据的情况,为了保证这些数据的能够受事务的控制,就需要分布式事务的帮助了,而xa协议则是分布式事务需要实现的协议。
xa事务介绍
xa支持分布式事务,通过xa事务可以允许多个数据源加入到一个全局事务中来,加入事务中的资源通常是关系数据库,也有可能是其他数据资源。
在一个全局事务中,包含多个数据操作的动作,这些动作在全局事务中要么全部执行,要么全部不执行,一个使用全局事务的应用包含一个或者多个资源管理器和一个事务管理器:
- 资源管理器RM(resource manager):提供连接事务资源的的功能。一个数据库服务器就是一种资源管理器。资源管理器是事务的参与者,必须要提供提交和回滚事务的功能
- 事务管理器TM(transaction manager):事务管理器是全局事务的协调者,他通过与资源管理器通信,协调多个事务的运作。
mysql通过实现xa协议,处理xa事务,让自身成为全局事务中的一个资源管理器。一个连接到mysql服务器的客户端则充当一个事务管理器的角色。实现全局事务,需要知道那些参与者参与到