各位用户为了找寻关于mysql跨库事务XA操作示例的资料费劲了很多周折。这里教程网为您整理了关于mysql跨库事务XA操作示例的相关资料,仅供查阅,以下为您介绍关于mysql跨库事务XA操作示例的详细内容

本文实例讲述了mysql跨库事务XA操作。分享给大家供大家参考,具体如下:

前一段时间在工作中遇到了跨库事务问题,后来在网上查询了一下,现在做一下整理和总结。

1、首先要确保mysql开启XA事务支持

? 1 SHOW VARIABLES LIKE '%XA%'

如果innodb_support_xa的值是ON就说明mysql已经开启对XA事务的支持了。

如果不是就执行:

? 1 SET innodb_support_xa = ON ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <?PHP $dbtest1 = new mysqli("172.20.101.17","public","public","dbtest1")or die("dbtest1 连接失败"); $dbtest2   = new mysqli("172.20.101.18","public","public","dbtest2")or die("dbtest2 连接失败"); //为XA事务指定一个id,xid 必须是一个唯一值。 $xid = uniqid(""); //两个库指定同一个事务id,表明这两个库的操作处于同一事务中 $dbtest1->query("XA START '$xid'");//准备事务1 $dbtest2->query("XA START '$xid'");//准备事务2 try {   //$dbtest1   $return = $dbtest1->query("UPDATE member SET name='唐大麦' WHERE id=1") ;   if($return == false) {     throw new Exception("库dbtest1@172.20.101.17执行update member操作失败!");   }   //$dbtest2   $return = $dbtest2->query("UPDATE memberpoints SET point=point+10 WHERE memberid=1") ;   if($return == false) {     throw new Exception("库dbtest1@172.20.101.18执行update memberpoints操作失败!");   }   //阶段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(); ?>

XA的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右

希望本文所述对大家MySQL数据库计有所帮助。

原文链接:https://www.cnblogs.com/isuben/p/7908468.html