本文实例讲述了mysql跨库事务XA操作。分享给大家供大家参考,具体如下:
前一段时间在工作中遇到了跨库事务问题,后来在网上查询了一下,现在做一下整理和总结。
1,首先要确保mysql开启XA事务支持
显示变量如' % XA % ' >之前
如果innodb_support_xa的值是在就说明mysql已经开启对XA事务的支持了。
如果不是就执行:
设置innodb_support_xa=> & lt; & # 63; PHP dbtest1美元=new mysqli(“172.20.101.17”、“公开”、“公开”、“dbtest1”)或死亡(“dbtest1连接失败”); dbtest2美元=new mysqli(“172.20.101.18”、“公开”、“公开”、“dbtest2”)或死亡(“dbtest2连接失败”);//为XA事务指定一个id, xid必须是一个唯一值。 $ xid=函数(" ");//两个库指定同一个事务id、表明这两个库的操作处于同一事务中 美元dbtest1→查询(“XA开始xid美元”);//准备事务1 美元dbtest2→查询(“XA开始xid美元”);//准备事务2 尝试{//dbtest1美元 返回=美元dbtest1→查询(“更新成员集名称=疤拼舐蟮膇d=1”); 如果美元返回==false) { 抛出新的异常(“库dbtest1@172.20.101.17执行更新成员操作失败!”); }//dbtest2美元 返回=美元dbtest2→查询(“更新memberpoints设定值+ 10=点memberid=1”); 如果美元返回==false) { 抛出新的异常(“库dbtest1@172.20.101.18执行更新memberpoints操作失败!”); }//阶段1:$ dbtest1提交准备就绪 美元dbtest1→查询(“XA xid美元”); 美元dbtest1→查询(“XA准备xid美元”);//阶段1:$ dbtest2提交准备就绪 美元dbtest2→查询(“XA xid美元”); 美元dbtest2→查询(“XA准备xid美元”);//阶段2:提交两个库 美元dbtest1→查询(“XA提交xid美元”); 美元dbtest2→查询(“XA提交xid美元”); } 捕获(异常$ e) {//阶段2:回滚 美元dbtest1→查询(“XA回滚xid美元”); 美元dbtest2→查询(“XA回滚xid美元”); 死($ e→getMessage ()); } 美元dbtest1→close (); 美元dbtest2→close (); & # 63;比; >之前XA的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL查询技巧大全》,《MySQL存储过程技巧大全》,《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》
希望本文所述对大家MySQL数据库计有所帮助。
mysql跨库事务XA操作示例