首页 > 编程笔记 > MySQL笔记 阅读:16

MySQL分布式事务的用法(新手必看)

MySQL 中,使用分布式事务的应用程序涉及一个或多个资源管理器和一个事务管理器,分布式事务的事务参与者、资源管理器、事务管理器等位于不同的节点上,这些不同的节点相互协作共同完成一个具有逻辑完整性的事务。

分布式事务的主要作用在于确保事务的一致性和完整性。

MySQL分布式事务的原理

资源管理器(Resource Manager,简称 RM)用于向事务提供资源,同时还具有管理事务提交或回滚的能力。数据库就是一种资源管理器。

事务管理器(Transaction Manager,简称 TM)用于和每个资源管理器通信,协调并完成事务的处理。一个分布式事务中各个事务均是分布式事务的“分支事务”。分布式事务和各分支通过一种命名方法进行标识。

MySQL 执行分布式事务,首先要考虑网络中涉及多少个事务管理器,MySQL 分布式事务管理,简单地讲就是同时管理若干事务管理器事务的一个过程,每个资源管理器的事务当执行到被提交或者被回滚的时候,根据每个资源管理器报告的有关情况,决定是否将这些事务作为一个原子性的操作执行全部提交或者全部回滚。

因为 MySQL 分布式事务同时涉及多台 MySQL 服务器,所以在管理分布式事务的时候,必须考虑网络可能存在的故障问题。

用于执行分布式事务的过程使用两个阶段。
分布式事务的主要作用在于确保事务的一致性和完整性。它利用分布式的计算机环境,将多个事务性的活动合并成一个事务单元,这些事务组合在一起构成原子操作,这些事务的活动要么一起执行并提交事务,要么回滚所有的操作,从而保证了多个活动之间的一致性和完整性。

MySQL分布式事务的语法

在 MySQL 中,执行分布式事务的语法格式如下:
XA {START|BEGIN} xid [JOIN|RESUME]
XA START xid 表示用于启动一个事务标识为 xid 的事务。xid 分布式事务表示的值,既可以由客户端提供,也可以由 MySQL 服务器生成。

结束分布式事务的语法格式如下:
XA END xid [SUSPEND [FOR MIGRATE]]
其中 xid 包括:gtrid [, bqual [, formatID ]],含义如下:
XA PREPARE xid
该命令使事务进入 PREPARE 状态,也就是两阶段提交的第一个阶段。

XA COMMIT xid [ONE PHASE]
该命令用来提交具体的分支事务。

XA ROLLBACK xid
该命令用来回滚具体的分支事务。也就是两阶段提交的第二个提交阶段,分支事务被实际的提交或者回滚。

XA RECOVER
该命令用于返回数据库中处于PREPARE状态的分支事务的详细信息。

分布式的关键在于如何确保分布式事务的完整性,以及在某个分支出现问题时如何解决故障。

分布式事务的相关命令就是提供给应用如何在多个独立的数据库之间进行分布式事务的管理,包括启动一个分支事务、使事务进入准备阶段,以及事务的实际提交、回滚操作等。

MySQL 分布式事务分为两类,内部分布式事务和外部分布式事务:
MySQL 分布式事务在某些特殊的情况下会存在一定的漏洞,当一个事务分支在 PREPARE 状态的时候失去了连接,在服务器重启以后,可以继续对分支事务进行提交或者回滚操作,没有写入二进制日志,这将导致事务部分丢失或者主从数据库不一致。

相关文章