面试官问我:MySQL中的XA事务崩溃了如何恢复??

MySQL XA事务问题

服务器强制断电后重启,此时MySQL报错,查看MySQL启动日志时,发现如下所示的错误信息。

InnoDB: The log sequence number in ibdata files does not match

InnoDB: the log sequence number in the ib_logfiles!

100224 23:24:20 InnoDB: Database was not shut down normally!

InnoDB: Starting crash recovery.

InnoDB: Reading tablespace information from the .ibd files...

InnoDB: Restoring possible half-written data pages from the doublewrite

InnoDB: buffer...

InnoDB: Transaction 0 4497755 was in the XA prepared state.

InnoDB: Transaction 0 4468551 was in the XA prepared state.

InnoDB: Transaction 0 4468140 was in the XA prepared state.

InnoDB: 3 transaction(s) which must be rolled back or cleaned up

InnoDB: in total 0 row operations to undo

InnoDB: Trx id counter is 0 5312768

InnoDB: Starting in background the rollback of uncommitted transactions

100224 23:24:20 InnoDB: Rollback of non-prepared transactions completed

100224 23:24:20 InnoDB: Started; log sequence number 0 3805002509

100224 23:24:20 InnoDB: Starting recovery for XA transactions...

100224 23:24:20 InnoDB: Transaction 0 4497755 in prepared state after recovery

100224 23:24:20 InnoDB: Transaction contains changes to 8 rows

100224 23:24:20 InnoDB: Transaction 0 4468551 in prepared state after recovery

100224 23:24:20 InnoDB: Transaction contains changes to 1 rows

100224 23:24:20 InnoDB: Transaction 0 4468140 in prepared state after recovery

100224 23:24:20 InnoDB: Transaction contains changes to 1 rows

100224 23:24:20 InnoDB: 3 transactions in prepared state after recovery

100224 23:24:20 [Note] Found 3 prepared transaction(s) in InnoDB

100224 23:24:20 [Warning] Found 3 prepared XA transactions

100224 23:24:20 [Note] Event Scheduler: Loaded 0 events

100224 23:24:20 [Note] /opt/mysql/bin/mysqld: ready for connections.

Version: '8.0.18' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL)

从上面的日志信息中,可以看出有三个XA的事务没有提交或回滚。那该如何恢复MySQL的XA事务呢?

恢复MySQL XA事务

首先,登录到MySQL,执行如下命令。

mysql> xa recover;

+----------+--------------+--------------+------------------------------------------------------------+

| formatID | gtrid_length | bqual_length | data |

+----------+--------------+--------------+------------------------------------------------------------+

| 131075 | 30 | 28 | 1-7f000001:bae5:4b6928eb:f06397f000001:bae5:4b6928eb:f0650 |

| 131075 | 30 | 28 | 1-7f000001:bae5:4b6928eb:fb5c37f000001:bae5:4b6928eb:fb5cd |

| 131075 | 30 | 28 | 1-7f000001:bae5:4b6928eb:f03ea7f000001:bae5:4b6928eb:f0400 |

+----------+--------------+--------------+------------------------------------------------------------+

数据表示信息如下:

formatIDis the formatIDpart of the transaction xid

gtrid_lengthis the length in bytes of the gtridpart of the xid

bqual_lengthis the length in bytes of the bqualpart of the xid

datais the concatenation of the gtridand bqualparts of the xid

这是三个XA事务的信息,准备直接回滚。

mysql> xa rollback '1-7f000001:bae5:4b6928eb:fb5c3','7f000001:bae5:4b6928eb:fb5cd',131075;

Query OK, 0 rows affected (0.41 sec)

MySQL 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事务,但在不更改二进制日志机制的情况下不能这样。

mysql xa 异常_面试官问我:MySQL中的XA事务崩溃了如何恢复??相关推荐

  1. mysql 分段执行_面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  2. 事物的级别_面试官问:MySQL锁与事物隔离级别你知道吗?

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收 ...

  3. mysql自增_面试官:为什么 MySQL 的自增主键不单调也不连续?

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  4. 为什么不用mysql版本号加锁_面试必问的Mysql事务和锁,你真的了解吗?

    前言 本文内容 事务的定义和作用,隔离级别 MVCC 是什么,快照读和加锁读 锁分类,行锁,意向锁,怎么查看 Mysql 锁的信息 悲观锁和乐观锁的使用场景 Mysql 的版本为 8.0.17. 事务 ...

  5. mysql释放练级_面试官:谈谈Mysql事务隔离级别?

    当我们的数据库的引擎是InnoDB的时候. 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repeatable read).串行 ...

  6. .jar中没有主清单属性_面试官问:为什么SpringBoot的 jar 可以直接运行?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/uQvIna SpringBoot提供了一个插件spring-boot-mav ...

  7. 后处理程序文件大小的变量_【每日一题】(17题)面试官问:JS中事件流,事件处理程序,事件对象的理解?...

    关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 2020,实「鼠」不易 2021,「牛」转乾坤 风劲潮涌当扬帆,任重道远须奋蹄! 一.前言 2020.12.23 立 ...

  8. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  9. 从面试官问“为什么选择mysql数据库”说开去

    前几天面试,面试官问我:"为什么选择mysql数据库".现在想想,有如下的问题需要解决 关系型数据库有什么特点及举例 非关系型数据库有什么特点及举例 关系型数据库与非关系型数据库有 ...

  10. obj: object是什么意思_面试官问你JavaScript基本类型时他想知道什么?

    本文原载于SegmentFault专栏"前端小将" 整理编辑:SegmentFault 面试的时候我们经常会被问答js的数据类型.大部分情况我们会这样回答包括: 1.基本类型(值类 ...

最新文章

  1. intel服务器主板芯片,英特尔® 服务器主板 S2600CW2SR
  2. 【TypeScript】parseInt 函数将字符串转换为整数
  3. 数字图像处理:第九章 线性系统、卷积、傅立叶变换
  4. 微信开发同步微信服务器图片到本地,逻辑处理。
  5. x3-02 java_Day13 -- Java流程控制02
  6. c语言编程函数补充上机题,2011年计算机二级C语言上机操作题及答案(10)
  7. 阿里《Java手册》做一个有技术情怀的人
  8. cvc降噪和主动降噪_小米降噪项圈蓝牙耳机来了:Hybrid主动降噪技术
  9. Android 无法查看外部依赖jar的源码的问题
  10. 有了vue为什么还学react?
  11. python:filter用法
  12. MYSQL limit 分页
  13. mysql集群 自增_为什么我们要从MySQL迁移到TiDB?
  14. ireport 用html页面上 图片怎么都出不来 全是红叉的处理办法
  15. python实现语音机器人
  16. Spark、Hadoop大数据平台搭建
  17. C#/VB.NET 如何旋转PDF页面
  18. rxjava背压_rxjava3——背压
  19. 假冒Macbook充电器拆解:外表令人信服但内部却非常危险
  20. 【算法笔记】异或运算的奇妙之处

热门文章

  1. JavaFX及Java客户端技术的未来
  2. Android 修改字体,跳不过的 Typeface
  3. 前端面试总结--数据结构与算法五
  4. UBUNTU14.0.4安装eclipse
  5. github的使用 sourceTree
  6. Android文件的保存(本地和SD卡)与读取
  7. Windows 7 SP1开发完毕 已进入测试阶段
  8. 用ISA 2004发布内部FTP服务器
  9. 解决wordpress用户注册时,点击邮件中的重置密码链接提示“您的密码重设链接无效”
  10. WordPress出现循环重定向解决办法