在对最近发布的通用JCA适配器进行一些测试时,该适配器能够将对微服务(以及其他东西)的远程调用绑定到JTA事务中,我发现Mysql 5.6中的一个错误已经存在了将近十年。

在XA事务的“准备”阶段之后,在数据库和通用连接器都投票提交事务之后,测试场景是崩溃。 在数据库或应用程序服务器崩溃之后,事务管理器将尝试恢复并提交数据库中的事务。 但是,当使用Mysql 5.6而不是Mysql 5.7测试崩溃时,我遇到的问题是数据库实际上从未提交过事务,这意味着系统整体处于不一致状态。 通用连接器绝对没有问题, 只有数据库 。 应用程序服务器连续记录事务未完成,但是无法完成数据库中的事务。 在模拟的数据库崩溃期间,应用程序返回了HeuristicMixedException ,以向用户指示某些内容不是并且永远不会保持一致。 JBoss记录的错误是:

...WARN [com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016037: Could not find new XAResource to use for recovering non-serializable XAResource XAResourceRecord < resource:null, txid: <...eis_name=unknown eis name >, heuristic: TwoPhaseOutcome.FINISH_OK ...>

我花了一些时间调试Mysql驱动程序代码,但最终遇到了MySQL Bug#12161 ,该Bug在打开近10年后才被关闭! 显然,数据库不是两阶段提交兼容的一点,因为请记住Wikipedia指出 : “…协议记录的恢复过程通常使用生成缓慢但可以幸免的日志记录。” 对于Mysql 5.6和早期版本,其日志记录无法幸免于故障,如bug报告中所记录。 此外,JCA规范1.6的7.6.2.8节指出,在调用commit或rollback之前,我们绝不能擦除对事务分支的了解,这也是Mysql所不遵循的。

不幸的是,该修补程序尚未在Mysql的5.6 GA版本中提供,而仅在5.7 DMR版本中可用。 但这将很快成为GA发布,而其他数据库(如Postgres和Oracle)都没有此问题。 JBoss手册 (RTFM!)中也清楚地描述了该问题,该手册还提供了与Oracle一起使用XA恢复的技巧,其中需要将适当的访问权限授予适当的用户(过去吸引了我们)。 有关此问题的更多信息,请参见此处 。 令人遗憾的是,对H2数据库进行的进一步测试表明,该数据库也不支持XA事务的恢复。

翻译自: https://www.javacodegeeks.com/2015/08/mysql-versions-prior-to-5-7-do-not-fully-support-two-phase-commit.html

5.7之前的MySQL版本不完全支持两阶段提交相关推荐

  1. mysql commit阶段,MySQL 基本架构与日志两阶段提交

    MySQL大致可以分为Server层和存储引擎层 Server层包括连接器,查询缓存,解析器,预处理器,优化器,执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程,触发器和视图等 连接器 负责 ...

  2. MySQL 为什么需要两阶段提交?

    文章目录 1. 什么是两阶段提交 1.1 binlog 与 redolog binlog redo log 1.2 两阶段提交 2. 为什么需要两阶段提交 3. 小结 为什么要两阶段提交?一阶段提交不 ...

  3. mysql三阶段提交实现_基于两阶段提交的分布式事务实现(UP-2PC)

    引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...

  4. mongodb mysql 事务_MongoDB数据库两阶段提交实现事务的方法详解 _ 蚂蚁视界

    本文实例讲述了MongoDB数据库两阶段提交实现事务的办法.分享给年夜家供年夜家参考,详细如下: MongoDB数据库中操作单个文档老是原子性的,然而,涉及多个文档的操作,通常被作为一个"事 ...

  5. 提交mysql代码_MySQL源码之两阶段提交

    在双1的情况下,两阶段提交的过程 环境准备:mysql 5.5.18, innodb 1.1 version 配置: sync_binlog=1 innodb_flush_log_at_trx_com ...

  6. mysql之两阶段提交

    什么是两阶段提交 当有数据修改时,会先将修改redo log cache和binlog cache然后在刷入到磁盘形成redo log file,当redo log file全都刷入到磁盘时(prep ...

  7. mysql事务及其实现原理--MVCC--二阶段提交

    目录 1 概述 2 四大特性 2.1 原子性 2.2 隔离性 2.2.1 MVCC 2.2.2 undolog---MVCC 2.2.3 Read View---MVCC 2.3  持久性 2.3.1 ...

  8. mysql 两阶段提交_两阶段提交(2PC)

    2PC两阶段提交协议: P-准备阶段(prepare) C-提交阶段(commit) 概念 在计算机部分关系数据库,如oracle和mysql中支持两阶段提交协议: 准备阶段(prepare phas ...

  9. joomla 3.6 mysql 版本_Joomla是否支持MariaDB数据库?

    最近,有一些小伙伴向我们询问有关在MariaDB数据库上运行其Joomla网站的信息. MariaDB是MySQL的分支,并且与它几乎相同.是的,Joomla确实没有正式支持MariaDB.但是,许多 ...

最新文章

  1. kml 解析 java_KML文件解析显示在地图
  2. curl命令使用总结
  3. 深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
  4. Spring注解配置工作原理源码解析
  5. vector深拷贝与浅拷贝使用总结
  6. 测试面试题集-Python编程题(1)
  7. 7-4 组从配置-操作
  8. 服务器经过交换机传递文件丢失,H3C交换机bin文件丢失后补救方案
  9. 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置
  10. 【读书笔记】Head First设计模式-设计模式入门-鸭子会不会飞(1)
  11. 微信公众号开发(1)微信公众号简介
  12. NOIP2016 暑期培训 D6
  13. 网络错误CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/mai...
  14. 【思维】黄金圈思维法则
  15. 魔兽怀旧服联盟服务器不稳定,魔兽世界怀旧服转服服务关闭最后一天,联盟部落新的对抗...
  16. 分享个甲铁城手游的辅助脚本,能够自动刷副本刷资源
  17. 川大667真题 | 2018年信息管理基础真题(名词解释+简答题)
  18. php 数字 字母,怎么使用php实现数字转字母
  19. navicat for mysql注册码分享
  20. echarts 3d地图加动画效果

热门文章

  1. OS系统中swap分区和虚拟内存关系
  2. python批量替换app多国语言翻译字符串
  3. 优优绿能冲刺创业板:年营收4.3亿估值25亿 小米是股东
  4. 裁员与活下去:今年的冬天好冷!
  5. 人生苦短,我用Python--分分钟下载知乎美图给你看
  6. geoserver wfs 服务访问
  7. ArrayList基本使用和引用数据类型
  8. PHPDragon设计结构
  9. 区块链奖励平台MiL.k与新世界免税店(Shinsegae Duty Free)实现集成
  10. html页面不论如何缩放也不改变布局的相对位置