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信息,则会将事务进行提交,并写入记录。
一般情况下,两阶段提交机制都能较好的运行,当在事务进行过程中,有参与者宕机时,他重启以后,可以通过询问其他参与者或者协调者,从而知道这个事务到底提交了没有。当然,这一切的前提都是各个参与者在进行每一步操作时,都会事先写入日志。
分享到:
相关推荐
### Oracle与MySQL两阶段提交的例子(EJB3) #### 一、引言 本文将深入探讨在EJB3中实现跨Oracle和MySQL数据库的两阶段提交(Two-Phase Commit, 2PC)机制的具体实例。两阶段提交是一种分布式事务管理协议,用于确保...
【数据库一阶段提交和两阶段提交的区别】 一阶段提交(One-Phase Commit)和两阶段提交(Two-Phase Commit)是分布式事务中常见的两种提交协议,它们主要用于保证跨多个数据库节点的事务一致性。 1. **一阶段提交*...
MySQL是世界上最流行的关系型数据库管理系统之一,其第三阶段的学习通常涉及深入理解数据类型、表的操作以及数据完整性约束。在这个阶段,我们将重点讨论如何创建数据表、应用约束、插入和查找记录,以及各种类型的...
总结来说,两阶段提交在MySQL中扮演着至关重要的角色,特别是在分布式环境中,确保了数据的一致性和完整性。通过细致的协调机制,MySQL能够在一个复杂的网络环境中维持数据的准确性和可靠性。上述代码执行流程揭示了...
二阶段提交是一种基于两阶段协议的分布式事务协调机制,其中binlog担当协调者角色,确保了即使数据库系统崩溃,事务也能够正确地提交或回滚。 在引入二阶段提交后,binlog的刷新也成为性能瓶颈,原先的Redo Log组...
Flink MySQL二阶提交代码,为了保证前一次 CheckPoint 成功后到这次 CheckPoint 成功之前这段时间内的数据不丢失,如果执行到一半过程任务失败了,从而导致前一次CheckPoint成功后到任务失败前的数据已经存储到了...
1. XA协议:MySQL遵循XA分布式事务协议,这是一个两阶段提交(2PC)的扩展,分为准备阶段和提交阶段。但在高并发场景下,2PC可能导致阻塞和数据不一致。 2. InnoDB存储引擎:提供了对分布式事务的支持,通过事务...
在**数据提交和处理**阶段,PHP脚本接收到表单数据后,会进行验证,确保输入的有效性和安全性,比如防止SQL注入。接着,脚本会建立到MySQL数据库的连接,使用预处理语句或参数化查询来插入数据,以避免潜在的安全...
5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK) 6 MySQL 存取权限系统 6.1 权限系统做什么 6.2 MySQL用户名和口令 6.3 与MySQL服务器连接 6.4 使你的口令安全 6.5 MySQL 提供的权限 ...
MySQL是一种广泛使用的开源关系型数据库管理系统,其源代码的版本为mysql-8.2.0,这代表了MySQL的一个特定开发阶段。在这个版本中,开发者和研究者可以深入理解MySQL的内部工作原理,进行定制化开发或者排查问题。...
MySQL的XA实现允许应用程序通过两阶段提交(2PC)协议来确保分布式事务的一致性。 #### 七、两阶段提交(2PC) 两阶段提交是实现分布式事务的核心机制。其主要步骤如下: 1. **准备阶段(Prepare Phase)**:事务管理...
本资料包“MySQL数据库第二阶段考试题.zip”包含了针对MySQL数据库学习的第二阶段考试题目及答案,旨在帮助考生深入理解和掌握MySQL的关键概念、语法以及实践操作。 在MySQL的学习过程中,第二阶段通常会涵盖以下几...
数据更新使用读已提交隔离级别来保证所有节点数据的一致性,使用两阶段提交机制保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即...
5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK) 6 MySQL 存取权限系统 6.1 权限系统做什么 6.2 MySQL用户名和口令 6.3 与MySQL服务器连接 6.4 使你的口令安全 6.5 MySQL 提供的...
在传统的关系型数据库中,如MySQL,如果使用InnoDB存储引擎,则可以通过两阶段提交来实现分布式事务,保证数据的ACID属性得到满足。 两阶段提交(2PC)是一个经典的协议,用来实现分布式系统中所有节点的事务参与者...
MySQL Cluster的数据更新使用读已提交隔离级别(read-committed isolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phased commit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败...
13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 ...
接下来是分析器阶段,分为词法分析和语法分析。词法分析将SQL语句分解为单词,识别出关键字、表名、列名等。然后,语法分析验证这些单词组成的语法结构是否符合MySQL的SQL标准,构建解析树。 预处理器进一步检查...
MySQL由服务器进程和客户端进程两大部分组成。服务器进程处理客户端的请求,执行SQL语句,并返回结果。客户端则通过网络连接发送查询请求并接收响应。这种架构使得多个客户端可以同时访问数据库,实现了并发处理。 ...