mysql跨库事务XA操作示例

 更新时间:2019年04月29日 10:49:26   作者:雨落知音  
这篇文章主要介绍了mysql跨库事务XA操作,结合实例形式分析了php+mysql实现跨库事务XA操作具体操作步骤与相关注意事项,需要的朋友可以参考下

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

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

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

SHOW VARIABLES LIKE '%XA%'

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

如果不是就执行:

SET innodb_support_xa = ON

<?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相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL查询技巧大全》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总

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

相关文章

  • Mysql自动备份与还原方法

    Mysql自动备份与还原方法

    Mysql自动备份与还原方法,需要的朋友可以参考下。
    2011-06-06
  • MySQL检索数据操作方法梳理

    MySQL检索数据操作方法梳理

    SELECT语句是SQL中最常用的语句。它的用途是从一个或多个表中检索信息。为了使用SELECT检索表数据,必须至少给出两条信息:想选择什么、从什么地方选择
    2022-10-10
  • 干涉MySQL优化器使用hash join的方法

    干涉MySQL优化器使用hash join的方法

    这篇文章主要介绍了如何干涉MySQL优化器使用hash join,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • MySQL 使用DQL命令查询数据的实现方法

    MySQL 使用DQL命令查询数据的实现方法

    这篇文章主要介绍了MySQL 使用DQL命令查询数据的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • win2003服务器下配置 MySQL 群集(Cluster)的方法

    win2003服务器下配置 MySQL 群集(Cluster)的方法

    MySQL 群集是 MySQL 适合于分布式计算环境的高可用、高冗余版本。它采用了 NDB Cluster 存储引擎,允许在 1 个群集中运行多个 MySQL 服务器。
    2010-12-12
  • 一文介绍mysql中TINYINT取值范围

    一文介绍mysql中TINYINT取值范围

    本文主要介绍了mysql中TINYINT取值范围,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL无法读表错误的解决方法(MySQL 1018 error)

    MySQL无法读表错误的解决方法(MySQL 1018 error)

    这篇文章主要为大家详细介绍了MySQL无法读表错误的解决方法,MySQL 1018 error如何解决?具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • mysql(5.6及以下)解析json的方法实例详解

    mysql(5.6及以下)解析json的方法实例详解

    这篇文章主要介绍了mysql(5.6及以下)解析json的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • MySQL-MMM安装指南(Multi-Master Replication Manager for MySQL)

    MySQL-MMM安装指南(Multi-Master Replication Manager for MySQL)

    这篇文章主要介绍了mysql Multi-Master Replication Manager for MySQL的安装方法,需要的朋友可以参考下
    2014-02-02
  • MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法

    MySQL出现this is incompatible with sql_mode=only_full_grou

    mysql是高版本,当执行group by时,select的字段不属于group by的字段的话,sql语句就会报错,下面这篇文章主要给大家介绍了关于MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法,需要的朋友可以参考下
    2023-02-02

最新评论