理论知识
InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实
现。分布式事务指的是允许多个独立的事务资源( transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的ACID要,求又有了提高。另外,在使用分布式事务时,InnoDB 存储引擎的事务隔离级别必须设置为SERIALIZABLE。
XA事务允许不同数据库之间的分布式事务,如一台服务器是MySQL数据库的,另
一台是Oracle数据库的,又可能还有一台服务器是SQLServer数据库的,只要参与在全局事务中的每个节点都支持XA事务。分布式事务可能在银行系统的转账中比较常见,如用户czz需要从上海转10 000元到北京的用户cmq的银行卡中。
以下的函数使事务管理器可以对资源管理器进行的操作:
1)xa_open,xa_close:建立和关闭与资源管理器的连接。
2)xa_start,xa_end:开始和结束一个本地事务。
3)xa_prepare,xa_commit,xa_rollback:预提交、提交和回滚一个本地事务。
4)xa_recover:回滚一个已进行预提交的事务。
5)ax_开头的函数使资源管理器可以动态地在事务管理器中进行注册,并可以对XID(TRANSACTION IDS)进行操作。
6)ax_reg,ax_unreg;允许一个资源管理器在一个TMS(TRANSACTION MANAGER SERVER)中动态注册或撤消注册。
在本地环境启动两个数据库实例模拟跨服务器进行分布式事务请求操作:
初始化数据库如下图:
<?php
class connDb{
private static $host = '127.0.0.1:3306';
private static $username = 'root';
private static $password = 'root';
private static $dbName = 'test';
private $conn = null;
public function __construct(){
$this->conn = new MySQLi(self::$host,self::$username,self::$password,self::$dbName)