mysql的XA事务恢复过程详解_MySQL

WBOY
发布: 2016-06-01 13:23:14
原创
846 人浏览过

比特网 mysql数据库启动报错
InnoDB: ibdata 文件中的日志序列号与 ib_logfiles 中的日志序列号不匹配
InnoDB: ib_logfiles 中的日志序列号!
100224 12:24:20 InnoDB:数据库未正常关闭!
InnoDB:开始崩溃恢复。
InnoDB:从 .ibd 文件中读取表空间信息...
InnoDB:从双写恢复可能的半写入数据页
InnoDB:缓冲区...
InnoDB:事务 0 4497755 处于XA 准备状态。
InnoDB:事务 0 4468551 处于 XA 准备状态。
InnoDB:事务 0 4468140 处于 XA 准备状态。
InnoDB:必须回滚或清理 3 个事务
InnoDB:总共 0 行操作要撤消
InnoDB:Trx id 计数器为 0 5312768
InnoDB:在后台启动未提交事务的回滚
100224 12:24:20 InnoDB:未准备事务的回滚已完成
100224 12:24:20 InnoDB:已启动;日志序列号 0 3805002509
100224 12:24:20 InnoDB:开始恢复 XA 事务...
100224 12:24:20 InnoDB:恢复后事务 0 4497755 处于准备状态
100224 12:24 :20 InnoDB: 事务包含对 8 行的更改
100224 12:24:20 InnoDB: 事务 0 4468551 恢复后处于准备状态
100224 12:24:20 InnoDB: 事务包含对 1 行的更改
100224 12:24:20 InnoDB:恢复后事务 0 4468140 处于准备状态
100224 12:24:20 InnoDB:事务包含对 1 行的更改
100224 12:24:20 InnoDB:恢复后有 3 个事务处于准备状态
100224 12:24:20 [注意] 在 InnoDB 中发现 3 个准备好的事务
100224 12:24:20 [警告]发现 3 个准备好的 XA 事务
100224 12:24:20 [注意]事件调度程序:已加载 0 个事件
100224 12:24:20 [注意] /opt/mysql/bin/mysqld:准备连接。
版本:'5.1.39'套接字:'/tmp/mysql.sock'端口:3306 MySQL社区服务器(GPL)
意味着有三个XA的事务没有提交或回滚。
登录到mysql
mysql> xa recovery;
---------- -------------- -------------- --------- -------------------------------------------------- -
|格式ID | gtrid_长度 | bqual_length | bqual_length |数据|
---------- -------------- -------------- --------- -------------------------------------------------- -
| 131075 | 131075 30| 28 | 28 1-7f000001:bae5:4b6928eb:f06397f000001:bae5:4b6928eb:f0650 |
| 131075 | 131075 30| 28 | 28 1-7f000001:bae5:4b6928eb:fb5c37f000001:bae5:4b6928eb:fb5cd |
| 131075 | 131075 30| 28 | 28 1-7f000001:bae5:4b6928eb:f03ea7f000001:bae5:4b6928eb:f0400 |
---------- -------------- -------------- --------- -------------------------------------------------- -
数据表示信息如下
formatID是交易xid的formatID部分
gtrid_length是xid的gtrid部分的字节长度
bqual_length是bqual部分的字节长度xid
数据是xid的gtrid和bqualparts的串联
这是三个XA事务的信息,准备直接回滚。
mysql> xa rollback '1-7f000001:bae5:4b6928eb:fb5c3 ','7f000001:bae5:4b6928eb:fb5cd',131075;
查询正常,0行受影响(0.41秒)
再启动就正常了。

MySQL XA
I.5. 对XA事务的限制
XA事务支持仅限于InnoDB存储引擎。
MySQL XA实施是针对外部XA的,其中,MySQL服务器作为资源管理器,而客户端程序作为事务管理器。未实施“内部实施” XA”。这样,就允许MySQL服务器内部的单独的存储引擎作为RM(资源管理器),而服务器本身作为TM(事务管理器)。处理包含1个以上存储引擎的XA事务时,需要内部XA。内部XA 是不完整的,这是因为,它要求存储引擎在表处理程序方面实施上支持两阶段提交,目前仅对 InnoDB 实现了该功能。
对于 XA START,不支持 JOIN 和 RESUME 子句

对于XA END,不支持SUSPEND [FOR MIGRATE]子句。
在全局事务内,对于每个XA事务,xid值的bqual部分应该是不同的,该要求是对当前MySQL XA的限制。它不是XA规范的组成部分。

如果XA事务达到PREPARED状态并且MySQL服务器宕机,当服务器重启后,能够继续处理事务。就像应该的那样。但是,如果客户端连接中止而服务器继续运行,服务器将回滚任何未完成的 XA 事务,即使该事务已达到 PREPARED 状态也同样。它可以提交或回滚 PREPARED XA 事务,但在不更改二进制日志机制的情况下不能这样。bitsCN.com

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板