mysql5.6 分布式事务_mysql 分布式事务xa 示例
/***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 示例相关推荐
- mysql的从节点能否执行事务_MySQL执行事务的语法与流程详解
摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...
- mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)
试想,事务如果都是串行的,那么就不需要锁了,但是性能肯定没法接受.加锁只是为了提高事务并行度,并且解决并发事务执行过程中引起的脏写.脏读.不可重复读.幻读这些问题的一种解决方案(MVCC算是一种解决脏 ...
- mysql链事务_MYSQL 之事务篇
事务概述 在引入事务之前我们先考虑银行转账的操作: # 从id=1的账户给id=2的账户转账100元 # 第一步:将id=1的A账户余额减去100 UPDATE accounts SET balanc ...
- mysql innodb 事务_Mysql InnoDB事务
事务特点 ACID ATOMICITY:原子性 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这 ...
- mysql 外键和事务_Mysql (五)事务和外键
一. 什么是事务:简单说,所谓事务就是一组操作,这组操作要么都成功执行,要么都不执行. 二. 事务的使用流程 1. 第一步:开启事务,start transaction: 2. 第二步:正常操作SQL ...
- mysql之事务_MySQL之事务
什么是事务? 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). **MySQL的事务是在存储引擎层实现. MySQ ...
- mysql 一条sql 事务_MySQL的事务
MySQL中事务是一个最小的不可分割的工作单元,事务能保证一个业务的完整性 一个业务中有多条sql语句,这些sql语句必须同时成功或同时失败,这时需要要事务来保证这个要求. 例如:a从自己的银行卡上转 ...
- mysql 分布式 安装_mysql分布式集群安装-阿里云开发者社区
概述 MySQL Cluster旨在提供具有高可用性和低延迟的MySQL兼容数据库. MySQL Cluster技术通过NDB(网络数据库)和NDBCLUSTER存储引擎实现,并为MySQL数据库系统 ...
- php mysql xa_分布式事务之——MySQL对XA事务的支持
MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持.MySQL Connector/J 从5.0.0版本之后开始直接提供对XA的支持. 需要注意的是, 在DTP模型中,my ...
最新文章
- 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句
- 中国队刷新知识图谱“世界杯”,但点开冠军团队一看,我愣住了
- linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项
- 想转行,是要入坑Python还是Java?这问题还用问?
- 年底了,按约定把2021 Go面试八股整理全了
- 字符串数组排序,如果可以保证前一个字符的末尾与后一个字符的开头相同,返回1,否则返回-1...
- JAVA内部类(一)
- 【Git】Git国内官网下载地址、淘宝镜像下载地址以及卸载安装
- mysql默认数据库名_mysql默认数据库
- fb2 android,FBReader PDF plugin app
- 交银施罗德基金郭斐:集中心力,布好一盘“成长投资”
- 阿里云服务器是如何计费的?包年包月与按量付费有什么区别?
- win10 不能查看其它电脑共享文件夹常用解决方法
- 三种快排及四种优化方式
- vs可以开发python吗_vs可以写python吗
- 微信聊天中上怎么用计算机,电脑可以上微信吗,教您电脑怎么用微信
- android webview 找不到网页,[疑难杂症] Android WebView 无法打开天猫页面
- PyTorch 2.0来了!100%向后兼容,一行代码训练提速76%
- 全系列列慧荣主控U盘SSD固态硬盘量产开卡工具
- 基于表面肌电信号的手势识别——深度学习方法
热门文章
- 交叉分解+Cross decomposition
- php获取目录文件 排序输出,php实现对文件夹目录中的文件进行排序的方法
- TensorFlow 强制使用CPU
- tf.cast() 张量数据类型转换
- 四十八、减少磁盘延迟时间的方法
- 【自然语言处理】hmm隐马尔可夫模型进行中文分词 代码
- jquery 使用小技巧
- ASP .NET Core MVC Entity Framework 旧书交易网站
- linux 轻量化图形界面,用这13个方法,帮你做出真正轻量化的移动 App 设计
- 删除u盘mbr多余启动项 linux,高手教你怎么修复U盘的MBR