MySQL分布式事务的用法(新手必看)
在 MySQL 中,使用分布式事务的应用程序涉及一个或多个资源管理器和一个事务管理器,分布式事务的事务参与者、资源管理器、事务管理器等位于不同的节点上,这些不同的节点相互协作共同完成一个具有逻辑完整性的事务。
分布式事务的主要作用在于确保事务的一致性和完整性。
事务管理器(Transaction Manager,简称 TM)用于和每个资源管理器通信,协调并完成事务的处理。一个分布式事务中各个事务均是分布式事务的“分支事务”。分布式事务和各分支通过一种命名方法进行标识。
MySQL 执行分布式事务,首先要考虑网络中涉及多少个事务管理器,MySQL 分布式事务管理,简单地讲就是同时管理若干事务管理器事务的一个过程,每个资源管理器的事务当执行到被提交或者被回滚的时候,根据每个资源管理器报告的有关情况,决定是否将这些事务作为一个原子性的操作执行全部提交或者全部回滚。
因为 MySQL 分布式事务同时涉及多台 MySQL 服务器,所以在管理分布式事务的时候,必须考虑网络可能存在的故障问题。
用于执行分布式事务的过程使用两个阶段。
分布式事务的主要作用在于确保事务的一致性和完整性。它利用分布式的计算机环境,将多个事务性的活动合并成一个事务单元,这些事务组合在一起构成原子操作,这些事务的活动要么一起执行并提交事务,要么回滚所有的操作,从而保证了多个活动之间的一致性和完整性。
结束分布式事务的语法格式如下:
分布式的关键在于如何确保分布式事务的完整性,以及在某个分支出现问题时如何解决故障。
分布式事务的相关命令就是提供给应用如何在多个独立的数据库之间进行分布式事务的管理,包括启动一个分支事务、使事务进入准备阶段,以及事务的实际提交、回滚操作等。
MySQL 分布式事务分为两类,内部分布式事务和外部分布式事务:
MySQL 分布式事务在某些特殊的情况下会存在一定的漏洞,当一个事务分支在 PREPARE 状态的时候失去了连接,在服务器重启以后,可以继续对分支事务进行提交或者回滚操作,没有写入二进制日志,这将导致事务部分丢失或者主从数据库不一致。
分布式事务的主要作用在于确保事务的一致性和完整性。
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 ]],含义如下:
- gtrid 是一个分布式事务标识符;
- bqual 表示一个分支限定符,默认值是空字符串。对于一个分布式事务中的每个分支事务,bqual 值必须是唯一的;
- formatID 是一个数字,用于标识由 gtrid 和 bqual 值使用的格式,默认值为 1。
XA PREPARE xid该命令使事务进入 PREPARE 状态,也就是两阶段提交的第一个阶段。
XA COMMIT xid [ONE PHASE]该命令用来提交具体的分支事务。
XA ROLLBACK xid该命令用来回滚具体的分支事务。也就是两阶段提交的第二个提交阶段,分支事务被实际的提交或者回滚。
XA RECOVER该命令用于返回数据库中处于PREPARE状态的分支事务的详细信息。
分布式的关键在于如何确保分布式事务的完整性,以及在某个分支出现问题时如何解决故障。
分布式事务的相关命令就是提供给应用如何在多个独立的数据库之间进行分布式事务的管理,包括启动一个分支事务、使事务进入准备阶段,以及事务的实际提交、回滚操作等。
MySQL 分布式事务分为两类,内部分布式事务和外部分布式事务:
- 内部分布式事务用于同一实例下跨多个数据引擎的事务,由二进制日志作为协调者;
- 而外部分布式事务用于跨多个 MySQL 实例的分布式事务,需要应用层介入作为协调者,全局提交还是回滚,都是由应用层决定的,对应用层的要求比较高。
MySQL 分布式事务在某些特殊的情况下会存在一定的漏洞,当一个事务分支在 PREPARE 状态的时候失去了连接,在服务器重启以后,可以继续对分支事务进行提交或者回滚操作,没有写入二进制日志,这将导致事务部分丢失或者主从数据库不一致。