广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库分布式事务XA的实现原理分析
  • 490
分享到

MySQL数据库分布式事务XA的实现原理分析

2024-04-02 19:04:59 490人浏览 八月长安
摘要

  1 原理   关于Mysql数据库的分布式事务XA,分布式事务实现的原理,可见[3];关于mysql XA的说明,可见[1][2]。   Mysql XA分为两类,内部XA与外部XA;内部XA用于同一

  1 原理

  关于Mysql数据库分布式事务XA,分布式事务实现的原理,可见[3];关于mysql XA的说明,可见[1][2]。

  Mysql XA分为两类,内部XA与外部XA;内部XA用于同一实例下跨多个引擎的事务,由大家熟悉的Binlog作为协调者;外部XA用于跨多MySQL实例的分布式事务,需要应用层介入作为协调者(崩溃时的悬挂事务,全局提交还是回滚,需要由应用层决定,对应用层的实现要求较高);

  本文,假设读者已经知道MySQL数据库外部分布式事务XA的使用,而将重点放在MySQL数据库,如何处理外部分布式事务XA的crash recover,以及面对不同的crash recover的情形,应用程序如何处理,才能够保证分布式事务的一致性。最后,本文简单分析一下目前MySQL数据库外部XA支持存在的问题,以及可选的解决方案。

  源代码分析基于MySQL 5.1.49,MySQL 5.5.16。

  2 MySQL处理流程

  2.1 MySQL 外部XA – 正常处理流程

  MySQL数据库外部XA的正常处理流程,这里不准备介绍,可以参考[1][2][3]。接下来我重点描述一下MySQL数据库外部分布式事务XA的崩溃恢复流程,毕竟此流程跟应用程序如何正确使用外部XA息息相关。

  2.2 MySQL外部XA – 崩溃恢复流程

  若一个运行外部XA分布式事务的MySQL数据库节点发生崩溃,那么其重启之后的崩溃恢复,涉及到外部XA处理的流程如下:

  Crash recover:

// 1. 读取binlog文件,将文件中的xid存入commit_list hash表 
  // 顾名思义,所谓的commit_list,就是说此list中对应prepare状态的xid 
  // 在崩溃恢复过程中均可以被提交,而不在commit_list中的xid,均须回滚 
  // binlog中的xid,都是属于内部xid,由MySQL产生,用于内部XA 
  Log.cc::TC_LOG_BINLOG::recover 
  // 2. 遍历底层所有的事务引擎,收集处于XA_PREPARED状态的所有xid 
  // 这些xid列表,既包括内部xid,也包括外部xid,存储引擎内部不做区分 
  Handler.cc::ha_recover(commit_list) 
  // 执行各引擎层面提供的recover方法,收集所有的处于prepared状态的xid 
  // 根据xid分类: 
  // 3. 若xid属于内部xid,那么在commit_list中查找此xid, 
  // 若存在,则提交此xid对应的事务;否则,回滚此事务 
  // 4. 若xid属于外部xid,那么则将xid插入xid_cache hash表 
  // xid_cache中的所有xid,将会通过xa recover命令返回,等待外部程序决策 
  Handler.cc::xarecover_handlerton 
  // 5. 收集InnoDB存储引擎中,处于prepare状态的所有xid,并返回 
  Got = hton->recover (innobase_xa_recover) 
  my_xid x = info->list[i].get_my_xid(); 
  if (!x) 
  // 若当前为外部xid,那么将xid插入xid_cache hash表 
  xid_cache_insert(&xid_cache, x); 
  else 
  if (x in commit_list) 
  // 若当前为内部xid,同时此xid在binlog中存在,则提交 
  hton->commit_by_xid(); 
  else 
  // 若当前为内部xid,同时此xid在binlog中不存在,则回滚 
  hton->rollback_by_xid();
您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库分布式事务XA的实现原理分析

本文链接: https://www.lsjlt.com/news/47606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库分布式事务XA的实现原理分析
      1 原理   关于MySQL数据库的分布式事务XA,分布式事务实现的原理,可见[3];关于MySQL XA的说明,可见[1][2]。   MySQL XA分为两类,内部XA与外部XA;内部XA用于同一...
    99+
    2022-10-18
  • 数据库分布式事务的实现原理!
    事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与微服务架构大行其道的今天,在分布式的多个服...
    99+
    2022-10-18
  • 一文搞懂MySQL XA如何实现分布式事务
    目录前言XA 协议如何通过MySQL XA实现分布式事务前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开...
    99+
    2022-11-12
  • fescar分布式事务实现原理实例分析
    这篇文章主要介绍了fescar分布式事务实现原理实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇fescar分布式事务实现原理实例分析文章都会有所收获,下面我们一起来看看吧。项目说明本博文所述代码为fes...
    99+
    2023-06-29
  • 解析探秘fescar分布式事务实现原理
    目录前言项目说明fescar的TXC模型项目结构解析通过【examples】模块的实例看下效果第一步、第二步、第三步、fescar事务过程分析首先分析配置文件【TM】模块启动全局事务...
    99+
    2022-11-13
  • 分析数据库实现原理
    本篇内容介绍了“分析数据库实现原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Hash连接,如内存足够,...
    99+
    2022-10-18
  • Java中TCC分布式事务的实现原理
    这篇文章给大家分享的是有关Java中TCC分布式事务的实现原理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理...
    99+
    2023-06-14
  • redis分布式锁的实现原理实例分析
    这篇文章主要介绍了redis分布式锁的实现原理实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis分布式锁的实现原理实例分析文章都会有所收获,下面我们一起来看看吧。首先,为了确保分布式锁可用,我们至...
    99+
    2023-06-29
  • SequoiaDB 分布式事务实现原理是什么
    这篇文章将为大家详细讲解有关SequoiaDB 分布式事务实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1分布式事务背景随着分布式数据库技术的...
    99+
    2022-10-19
  • 详解Java TCC分布式事务实现原理
    目录概述业务场景介绍进一步思考落地实现 TCC 分布式事务TCC 实现阶段一:TryTCC 实现阶段二:ConfirmTCC 实现阶段三:Cancel总结与思考最终一致性分布式事务如...
    99+
    2022-11-12
  • JPA多数据源分布式事务的示例分析
    这篇文章主要介绍了JPA多数据源分布式事务的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题背景在解决mysql字段脱敏处理时,结合sharding-jdbc的脱敏...
    99+
    2023-06-29
  • 分布式数据库原理和PostgreSQL 分布式架构是怎样的
    分布式数据库原理和PostgreSQL 分布式架构是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、 什么是分布式数据库分...
    99+
    2022-10-19
  • MySQL数据库事务的示例分析
    小编给大家分享一下MySQL数据库事务的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务特点:ACID从业务角度出发,...
    99+
    2022-10-18
  • Redisson分布式限流的实现原理解析
    目录正文RRateLimiter使用RRateLimiter的实现RRateLimiter使用时注意事项RRateLimiter是非公平限流器Rate不要设置太大限流的上限取决于Redis单实例的性能分布式限流的本质正文...
    99+
    2023-02-12
    Redisson分布式限流 Redisson 分布式
  • 怎么理解高并发下的数据库分布式事务
    这篇文章主要介绍“怎么理解高并发下的数据库分布式事务”,在日常操作中,相信很多人在怎么理解高并发下的数据库分布式事务问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解高并发下的数据库分布式事务”的疑惑有所...
    99+
    2023-06-02
  • MySQL数据库优化之索引实现原理与用法分析
    本文实例讲述了MySQL数据库优化之索引实现原理与用法。分享给大家供大家参考,具体如下: 索引 什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行...
    99+
    2022-10-18
  • Spring数据库连接池实现原理实例分析
    这篇“Spring数据库连接池实现原理实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring数据库连接池实现原理...
    99+
    2023-07-04
  • 怎么在MySQL数据库中实现一个分布式锁
    这篇文章将为大家详细讲解有关怎么在MySQL数据库中实现一个分布式锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。建表CREATE TABLE&n...
    99+
    2022-10-18
  • 分布式数据库事务的两阶段提交介绍
    在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况。所以...
    99+
    2022-10-18
  • springboot+mybatisplus+druid如何实现多数据源+分布式事务
    这篇文章主要介绍springboot+mybatisplus+druid如何实现多数据源+分布式事务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  jdk环境:1.8  springboot:2.1.3.RELEA...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作