`
javafan_303
  • 浏览: 957051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql2阶段事务

 
阅读更多

1 二阶段提交协议

    一般分为协调器C和若干事务执行者Si两种角色:
    当执行某一事务T的所有站点Si都通知C事务执行完成,C即启动二阶段提交协议。
    1.首先C向所有Si发<prepare>消息(C先将<prepare>消息写到本机日志),Si收到<prepare>消息后,根据本机T的执行情况,如果成功返回<ready T>,不成功返回<abort T>。(返回前都应把要返回的消息写到日志里)
    2.C收集完所有Si的返回消息后(或经过一个超时周期后),如果都返回的是<ready T>,则事务成功,发送给所有站点<commit T>,否则事务失败发送<abort T>。发送前还是应把消息写到日志里。站点Si接收到C的<commit T>或<abort T>后先把消息写到日志里,然后再根据消息提交或回滚。
    注:C或Si把发送或接收到的消息先写到日志里,主要是为了故障后恢复用。如某一Si从故障中恢复后,先检查本机的日志,如果已收到<commit T>,则提交,如果<abort T>则回滚。如果是<ready T>,则再向C询问一下,确定下一步。如果什么都没有,则很可能在<prepare>阶段Si就崩溃了,因此需要回滚。
    二阶段提交的缺陷在于如果C崩溃,所有Si可能都需要等待C,从而产生阻塞。

2 二阶段提交过程

    第一阶段:
    首先,协调者在自身节点的日志中写入一条的日志记录,然后所有参与者发送消息prepare T,询问这些参与者(包括自身),是否能够提交这个事务;
    参与者在接受到这个prepare T 消息以后,会根据自身的情况,进行事务的预处理,如果参与者能够提交该事务,则会将日志写入磁盘,并返回给协调者一个ready T信息,同时自身进入预提交状态状态;如果不能提交该事务,则记录日志,并返回一个not commit T信息给协调者,同时撤销在自身上所做的数据库改;
    参与者能够推迟发送响应的时间,但最终还是需要发送的。
    第二阶段:
    协调者会收集所有参与者的意见,如果收到参与者发来的not commit T信息,则标识着该事务不能提交,协调者会将Abort T 记录到日志中,并向所有参与者发送一个Abort T 信息,让所有参与者撤销在自身上所有的预操作;
    如果协调者收到所有参与者发来prepare T信息,那么协调者会将Commit T日志写入磁盘,并向所有参与者发送一个Commit T信息,提交该事务。若协调者迟迟未收到某个参与者发来的信息,则认为该参与者发送了一个VOTE_ABORT信息,从而取消该事务的执行。
    参与者接收到协调者发来的Abort T信息以后,参与者会终止提交,并将Abort T 记录到日志中;如果参与者收到的是Commit T信息,则会将事务进行提交,并写入记录。
    一般情况下,两阶段提交机制都能较好的运行,当在事务进行过程中,有参与者宕机时,他重启以后,可以通过询问其他参与者或者协调者,从而知道这个事务到底提交了没有。当然,这一切的前提都是各个参与者在进行每一步操作时,都会事先写入日志。

 转载自:http://blog.csdn.net/jesseyoung/article/details/37970271

分享到:
评论

相关推荐

    mysql分布式事务实现 MySQL XA pdf

    MySQL的XA实现允许应用程序通过两阶段提交(2PC)协议来确保分布式事务的一致性。 #### 七、两阶段提交(2PC) 两阶段提交是实现分布式事务的核心机制。其主要步骤如下: 1. **准备阶段(Prepare Phase)**:事务管理...

    mysql索引,分布式事务,三阶段协议,b+树

    1. XA协议:MySQL遵循XA分布式事务协议,这是一个两阶段提交(2PC)的扩展,分为准备阶段和提交阶段。但在高并发场景下,2PC可能导致阻塞和数据不一致。 2. InnoDB存储引擎:提供了对分布式事务的支持,通过事务...

    基于MySQL的分布式事务的应用和缺陷.pdf

    在MySQL中实现分布式事务通常使用两阶段提交协议(2PC)。事务的第一阶段是准备阶段,所有参与者节点准备提交事务,并将事务状态锁定到一个预备状态。第二阶段是提交阶段,如果所有参与者都准备好了,事务管理器则...

    掌握分布式事务的艺术:深入MySQL XA事务处理

    具体来说,XA 协议通过两阶段提交(Two-Phase Commit, 2PC)实现这一点,其中包含准备(Prepare)和提交(Commit)阶段。 #### 2. MySQL XA 事务的特点 ##### 2.1 跨数据库实例支持 MySQL 的 XA 事务支持在不同的 ...

    MySQL学习笔记:MySQL安装,MySQL数据类型,MySQL事务,MySQL函数

    事务可以分为四个阶段:开始事务、执行事务、提交事务、回滚事务。 MySQL 函数 MySQL 函数是指可以在 MySQL 中使用的函数,包括字符串函数、数字函数、日期和时间函数、聚合函数等。 MySQL 数据库 MySQL ...

    MySQL 外部XA及其在分布式事务中的应用分析

    在MySQL数据库中,XA事务通过两阶段提交协议(2PC)来协调分布式事务。该协议要求事务资源管理器(通常指数据库实例)在进行全局提交前,先达到一种“准备提交”的状态,并在所有参与方同意后,才能完成事务提交。...

    spring hibernate mysql 事务实例

    4. 分布式事务:如果涉及多个数据库或服务,可能需要使用分布式事务解决方案,如X/Open XA或两阶段提交协议。 本实例通过Spring、Hibernate和MySQL的整合,展示了如何在实际应用中实现事务处理,保证了数据的一致性...

    基于mysql,SpringBoot 分布式事务例子

    对于分布式事务,我们可以使用JTA(Java Transaction API)配合X/Open XA规范实现两阶段提交(2PC)。 MySQL作为广泛使用的SQL数据库,虽然默认不支持分布式事务,但可以通过InnoDB存储引擎启用行级锁和事务支持。...

    mysql跨库事务XA操作示例

    MySQL的跨库事务是处理分布式系统中数据一致性的重要机制,特别是在多数据库环境中。在大型应用中,由于数据的逻辑划分,往往需要在一个操作中同时更新多个数据库,这就需要用到跨库事务。MySQL支持分布式事务,主要...

    基于MySQL和PHP的分布式事务处理.pdf

    2. **提交阶段**:如果准备阶段成功,事务管理器通知所有资源管理器提交事务;如果在准备阶段有资源管理器拒绝,则事务管理器通知所有资源管理器回滚事务。 #### 三、基于MySQL和PHP的分布式事务处理实现 ##### ...

    Mysql事务控制(XA分布式事务)和锁定语句

    2. **提交或回滚阶段(Commit or Rollback Phase)**:基于预提交阶段的结果,TM决定是向所有RMs发送提交指令还是回滚指令。如果所有RMs都能成功预提交,则整个分布式事务将被提交;若有任一RM无法预提交,则整个...

    oracle-mysql 两阶段提交例子(ejb3)

    本文将深入探讨在EJB3中实现跨Oracle和MySQL数据库的两阶段提交(Two-Phase Commit, 2PC)机制的具体实例。两阶段提交是一种分布式事务管理协议,用于确保分布式系统中多个资源管理器(例如不同的数据库)能够协调...

    1 安装运行 Mysql%2C MySQL-Front 管理%2C JDBCHelloWorld 开发.doc

    // 2. 获取数据库连接 Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK", "root", null); // 3. 创建Statement对象 Statement stmt = ...

    MySQL数据库应用从入门到精通_第2版

    本书《MySQL数据库应用从入门到精通_第2版》旨在帮助读者从零基础开始,逐步掌握MySQL的使用技巧和高级功能,从而实现数据库管理与开发的精通。 一、MySQL基础知识 在入门阶段,首先会介绍MySQL的安装与配置,包括...

    涂抹MySQL 跟着三思一步一步学MySQL

    事务处理是MySQL中的重要概念,书里会详细解释事务的ACID特性(原子性、一致性、隔离性和持久性),并展示如何在MySQL中使用事务来确保数据的一致性和完整性。同时,还会涉及锁机制,帮助读者理解并发控制和数据安全...

    MySQL 事务(五).pdf

    - 使用两阶段提交 (2PC) 或其他协议来确保所有参与节点达成一致。 #### 十、案例研究 - 实际案例展示了如何利用事务来处理复杂的数据库操作,确保数据的准确性和一致性。 - 例如,在电子商务系统中处理订单时,...

    MYSQL

    6.7 存取控制,阶段1:连接证实 6.8 存取控制,阶段2:请求证实 6.9 权限更改何时生效 6.10 建立初始的 MySQL权限 6.11 向MySQL增加新用户权限 6.12 怎样设置口令 6.13 存取拒绝(Access ...

    mysql源码(mysql-8.2.0.tar.gz)

    2. InnoDB存储引擎:MySQL支持多种存储引擎,其中InnoDB是最常用的一种,它提供了事务处理、行级锁定以及外键约束等功能。源码中可以学习到InnoDB如何处理数据的读写、事务提交与回滚,以及索引的构建与查询优化。 ...

Global site tag (gtag.js) - Google Analytics