MySQL分布式XA事务

来源:互联网 发布:c盘windows 编辑:程序博客网 时间:2024/05/17 06:15
       
use App\ManagersOther;use App\Managers;use mysqli;use Exception;

 $dbtest1 = new mysqli("127.0.0.1","root","root","pangu")or die("dbtest1 连接失败");        $dbtest2 = new mysqli("103.199.102.225","*****","*****","*****")or die("dbtest2 连接失败");//为XA事务指定一个id,xid 必须是一个唯一值。        $xid = uniqid("");//两个库指定同一个事务id,表明这两个库的操作处于同一事务中        $dbtest1->query("XA START '$xid'");//准备事务1        $dbtest2->query("XA START '$xid'");//准备事务2        try {            //$dbtest1            //$time = Carbon::now();            $sql="INSERT INTO managers (`name`,`username`,`email`,`password`,`status`,`created_at`,`last_login`,`remark`) VALUES('X123123A','XA','','6969',1,'1','1',''); ";            $return = $dbtest1->query( $sql) ;            if($return == false) {                throw new Exception("库dbtest1@127.0.0.1执行insert操作失败!");            }            //$dbtest2            $return = $dbtest2->query("insert 123 into managers") ;            if($return == false) {                throw new Exception("库dbtest1@103.199.102.225执行select操作失败!");            }            //阶段1:$dbtest1提交准备就绪            $dbtest1->query("XA END '$xid'");            $dbtest1->query("XA PREPARE '$xid'");            //阶段1:$dbtest2提交准备就绪            $dbtest2->query("XA END '$xid'");            $dbtest2->query("XA PREPARE '$xid'");            //阶段2:提交两个库            $dbtest1->query("XA COMMIT '$xid'");            $dbtest2->query("XA COMMIT '$xid'");        }        catch (Exception $e) {            //阶段2:回滚            $dbtest1->query("XA ROLLBACK '$xid'");            $dbtest2->query("XA ROLLBACK '$xid'");            die($e->getMessage());        }        $dbtest1->close();        $dbtest2->close();
原创粉丝点击