/***XA MYSQL**/

//连接数据库1

function getConnect1()

{

$con = mysql_connect("localhost","root","root") or die("连接数据库失败1");

mysql_select_db("test1",$con) or die("找不到数据源1");

mysql_query("set names utf-8");

return $con;

}

function closeConnect($con){

if($con){

mysql_close($con);

}

}

//连接数据库2

function getConnect2()

{

$con = mysql_connect("localhost","root","root") or die("连接数据库失败1");

mysql_select_db("test2",$con) or die("找不到数据源2");

mysql_query("set names utf-8");

return $con;

}

$sql ="INSERT INTO `test1`.`help_category` (`help_category_id` ,`name` ,`parent_category_ids` ,`url`)VALUES ('38', 'lfq', '1', '/uuuuullllll');";

$sql2 = "INSERT INTO `test2`.`test` (`id` ,`val`)VALUES (3, 'lfq');";

//准备事务1

function ReadyTransaction1($grid){

$result = mysql_query("XA START '$grid'");

return $result;

}

//准备事务2

function ReadyTransaction2($grid){

$result = mysql_query("XA START '$grid'");

return $result;

}

function getQuery1($sql){

$result = mysql_query($sql);

return $result;

}

function getQuery2($sql){

$r = mysql_query($sql);

return $r;

}

try{

$grid = uniqid("");

$con1 = getConnect1();

ReadyTransaction1($grid);

$r = getQuery1($sql);

if($r == false)

{

throw new Exception("数据1执行失败");

}

$con2 = getConnect2();

ReadyTransaction2($grid);

$r = getQuery2($sql2);

if($r == false){

throw new Exception("数据2执行失败");

}

//通知是否准备提交

getQuery1("XA END '$grid'");

getQuery1("XA PREPARE '$grid'");

getQuery2("XA END '$grid'");

getQuery2("XA PREPARE '$grid'");

getQuery2("XA COMMIT '$grid'");//这两个基本同时执行

getQuery1("XA COMMIT '$grid'");

closeConnect($con1);

closeConnect($con2);

}

catch(Exception $e)

{

getQuery1("XA ROLLBACK '$grid'");

getQuery2("XA ROLLBACK '$grid'");

print $e->getMessage();

}

两阶段说明:

在第一阶段,所有的分支被预备好。即,它们被TM告知要准备提交。通常,这意味着用于管理分支的每个RM会记录对于被稳定保存的分支的行动。分支指示是否它们可以这么做。这些结果被用于第二阶段。

在第二阶段,TM告知RMs是否要提交或 回滚。如果在预备分支时,所有的分支指示它们将能够提交,则所有的分支被告知要提交。如果在预备时,有任何分支指示它将不能提交,则所有分支被告知 回滚。

常见的坑说明:

回滚

a. 如果这个xa事务commit了,那么什么也不用做。

b. 如果这个xa事务还没有prepare,那么直接回滚它。

c. 如果这个xa事务prepare了,还没commit,那么把它恢复到prepare的状态,由用户去决定commit或rollback。

mysql 5.6 分布式事务出现意外情况会丢失prepare binlog,建议使用5.7以上版本

XA事务和本地事务以及锁表操作是互斥的

xa start之后必须xa end,否则不能执行xa commit和xa rollback

mysql5.6 分布式事务_mysql 分布式事务xa 示例相关推荐

  1. mysql的从节点能否执行事务_MySQL执行事务的语法与流程详解

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  2. mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)

    试想,事务如果都是串行的,那么就不需要锁了,但是性能肯定没法接受.加锁只是为了提高事务并行度,并且解决并发事务执行过程中引起的脏写.脏读.不可重复读.幻读这些问题的一种解决方案(MVCC算是一种解决脏 ...

  3. mysql链事务_MYSQL 之事务篇

    事务概述 在引入事务之前我们先考虑银行转账的操作: # 从id=1的账户给id=2的账户转账100元 # 第一步:将id=1的A账户余额减去100 UPDATE accounts SET balanc ...

  4. mysql innodb 事务_Mysql InnoDB事务

    事务特点 ACID ATOMICITY:原子性 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这 ...

  5. mysql 外键和事务_Mysql (五)事务和外键

    一. 什么是事务:简单说,所谓事务就是一组操作,这组操作要么都成功执行,要么都不执行. 二. 事务的使用流程 1. 第一步:开启事务,start transaction: 2. 第二步:正常操作SQL ...

  6. mysql之事务_MySQL之事务

    什么是事务? 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). **MySQL的事务是在存储引擎层实现. MySQ ...

  7. mysql 一条sql 事务_MySQL的事务

    MySQL中事务是一个最小的不可分割的工作单元,事务能保证一个业务的完整性 一个业务中有多条sql语句,这些sql语句必须同时成功或同时失败,这时需要要事务来保证这个要求. 例如:a从自己的银行卡上转 ...

  8. mysql 分布式 安装_mysql分布式集群安装-阿里云开发者社区

    概述 MySQL Cluster旨在提供具有高可用性和低延迟的MySQL兼容数据库. MySQL Cluster技术通过NDB(网络数据库)和NDBCLUSTER存储引擎实现,并为MySQL数据库系统 ...

  9. php mysql xa_分布式事务之——MySQL对XA事务的支持

    MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持.MySQL Connector/J 从5.0.0版本之后开始直接提供对XA的支持. 需要注意的是, 在DTP模型中,my ...

最新文章

  1. 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句
  2. 中国队刷新知识图谱“世界杯”,但点开冠军团队一看,我愣住了
  3. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项
  4. 想转行,是要入坑Python还是Java?这问题还用问?
  5. 年底了,按约定把2021 Go面试八股整理全了
  6. 字符串数组排序,如果可以保证前一个字符的末尾与后一个字符的开头相同,返回1,否则返回-1...
  7. JAVA内部类(一)
  8. 【Git】Git国内官网下载地址、淘宝镜像下载地址以及卸载安装
  9. mysql默认数据库名_mysql默认数据库
  10. fb2 android,FBReader PDF plugin app
  11. 交银施罗德基金郭斐:集中心力,布好一盘“成长投资”
  12. 阿里云服务器是如何计费的?包年包月与按量付费有什么区别?
  13. win10 不能查看其它电脑共享文件夹常用解决方法
  14. 三种快排及四种优化方式
  15. vs可以开发python吗_vs可以写python吗
  16. 微信聊天中上怎么用计算机,电脑可以上微信吗,教您电脑怎么用微信
  17. android webview 找不到网页,[疑难杂症] Android WebView 无法打开天猫页面
  18. PyTorch 2.0来了!100%向后兼容,一行代码训练提速76%
  19. 全系列列慧荣主控U盘SSD固态硬盘量产开卡工具
  20. 基于表面肌电信号的手势识别——深度学习方法

热门文章

  1. 交叉分解+Cross decomposition
  2. php获取目录文件 排序输出,php实现对文件夹目录中的文件进行排序的方法
  3. TensorFlow 强制使用CPU
  4. tf.cast() 张量数据类型转换
  5. 四十八、减少磁盘延迟时间的方法
  6. 【自然语言处理】hmm隐马尔可夫模型进行中文分词 代码
  7. jquery 使用小技巧
  8. ASP .NET Core MVC Entity Framework 旧书交易网站
  9. linux 轻量化图形界面,用这13个方法,帮你做出真正轻量化的移动 App 设计
  10. 删除u盘mbr多余启动项 linux,高手教你怎么修复U盘的MBR