MySQL分布式事务

MySQL学习笔记


一,事务

从事务理论的角度来说,可以把事务分为以下几种类型:
1,扁平事务;
2,带有保存点的扁平事务;
3,嵌套事务;
4,分布式事务

扁平事务是事务类型中最简单的一种,但在实际生产环境中,这可能是使用最为频繁的事务。在扁平事务中,所有操作都处于同一层次,其由begin work开始,由commit work或rollback work结束,其间的操作是原子的,要么都执行,要么都回滚。因此扁平事务是应用程序称为原子操作的基本组成模块。


二,分布式事务

分布式事务通常是一个在分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点。

假设一个用户在ATM机进行银行的转账操作,例如持卡人从招商银行的储蓄卡转账10000元到工商银行的储蓄卡。在这种情况下,可以将ATM机视为节点A,招商银行的后台数据库视为节点B,工商银行的后台数据库视为节点C,这个转账的操作可以分解为以下的步骤:
1,节点A发出转账命令;
2,节点B执行储蓄卡中的余额值减去10000;
3,节点C执行储蓄卡中的余额值加上10000;
4,节点A通知用户操作完成或者节点A通过用户操作失败。

这里需要使用分布式事务,因为节点A不能通过调用一台数据库就完成操作。其需要访问网络中两个节点的数据库,而在每个节点的数据库执行的事务操作又都是扁平的。对于分布式事务,其同样需要满足ACID特性,要么都发送,要么都失效。对于上述的例子,如果2,3步中任何一个操作失败,都会导致整个分布式事务回滚。若非这样,结果会很严重。

MySQL使用InnoDB存储引擎实现分布式事务。

对于InnoDB存储引擎来说,其支持扁平事务,带有保存点的事务,链事务,分布式事务。对于嵌套事务,其并不原生支持,因此,对有并行事务需求的用户来说,MySQL数据库或InnoDB存储引擎就显得无能为力了。然而用户仍可以通过带有保存点的事务模拟串行的嵌套事务。


三,MySQL分布式事务

XA事务就是两阶段提交的一种实现方式。

InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。在使用分布式事务时,InnoDB存储引擎的事务隔离级别必须设置为SERIALIZABLE。

XA事务允许不同数据库之间的分布式事务,如一台服务器是MySQL数据库的,另一台是oracle数据库的,又可能还有一台服务器是SQL server数据库的,只要参与在全局事务中的每个节点都支持XA事务。

分布式事务可能在银行系统的转账中比较常见。

XA事务由一个或多个资源管理器(Resource Managers)、一个事务管理器(transaction manager)以及一个应用程序(application program)组成。
1,资源管理器:提供访问事务资源的方法。通常一个数据库就是一个资源管理器。
2,事务管理器:协调参与全局事务中的各个事务。需要和参与全局事务的所有资源管理器进行通信。
3,应用程序:定义事务的边界,指定全局事务中的操作。

在MySQL数据库的分布式事务中,资源管理器就是MySQL数据库,事务管理器为连接MySQL服务端的客户端。
如图显示了一个分布式事务的模型。
这里写图片描述

分布式事务使用两段式提交(two-phase commit)的方式。在第一阶段,所有参与全局事务的节点都开始准备(prepare),告诉事务管理器它们准备好提价了。在第二阶段,事务管理器告诉资源管理器执行rollback还是commit。如果任何一个节点显示不能提交,则所有的节点都被告知需要回滚。可见与本地事务不同的是,分布式事务需要多一次的prepare操作,待收到所有节点的同意信息后,再进行commit或是rollback操作。

在单个节点运行分布式事务没有太大的实际意义,但是要在MySQL数据库的命令下演示多个节点参与的分布式事务也会是行不通的。通常来说,都是通过编程语言来完成分布式事务的操作的,当前Java的JTA可以很好地支持MySQL的分布式事务。


四,参考资料

《MySQL技术内幕 InnoDB存储引擎》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值