MySQL数据库是如何实现XA规范的


当前第2页 返回上一页

如果所有 RM 都返回可以提交,那么向所有 RM 发送 Commit 命令,完成一次事务操作。

MySQL 如何实现 XA 规范

MySQL 中 XA 事务有两种情况,内部 XA 和外部 XA,其区别是事务发生在 MySQL 服务器单机上,还是发生在多个外部节点间上。

内部 XA

在 MySQL 的 InnoDB 存储引擎中,开启 binlog 的情况下,MySQL 会同时维护 binlog 日志与 InnoDB 的 redo log,为了保证这两个日志的一致性,MySQL 使用了 XA 事务,由于是在 MySQL 单机上工作,所以被称为内部 XA。

内部 XA 事务由 binlog 作为协调者,在事务提交时,则需要将提交信息写入二进制日志,也就是说,binlog 的参与者是 MySQL 本身。

外部 XA

外部 XA 就是典型的分布式事务,MySQL 支持 XA START/END/PREPARE/Commit 这些 SQL 语句,通过使用这些命令,可以完成分布式事务。

你也可以查看 MySQL 官方文档,了解更多的 XA 命令。

MySQL 外部 XA 主要应用在数据库代理层,实现对 MySQL 数据库的分布式事务支持,例如开源的数据库中间层,比如淘宝的 TDDL、阿里巴巴 B2B 的 Cobar 等。

外部 XA 一般是针对跨多 MySQL 实例的分布式事务,需要应用层作为协调者,比如我们在写业务代码,在代码中决定提交还是回滚,并且在崩溃时进行恢复。

binlog 中的 Xid

当事务提交时,在 binlog 依赖的内部 XA 中,额外添加了 Xid 结构,binlog 有多种数据类型:

  1. statement 格式,记录为基本语句,包含 Commit
  2. row 格式,记录为基于行
  3. mixed 格式,日志记录使用混合格式

不论是 statement 还是 row 格式,binlog 都会添加一个 XID_EVENT 作为事务的结束,该事件记录了事务的 ID 也就是 Xid,在 MySQL 进行崩溃恢复时根据 binlog 中提交的情况来决定如何恢复。

binlog 同步过程

下面来看看 binlog 下的事务提交过程,整体过程是先写 redo log,再写 binlog,并以 binlog 写成功为事务提交成功的标志。

当有事务提交时:

  • InnoDB 进入 Prepare 阶段,并且 write/sync redo log,写 redo log,将事务的 xid 写入到 redo 日志中,binlog 不作任何操作
  • 进行 write/sync binlog,写 binlog 日志,也会把 xid 写入到 binlog
  • 调用 InnoDB 引擎的 commit 完成事务的提交,将 commit 信息写入到 redo 日志中

如果是在第一步和第二步失败,则整个事务回滚

如果是在第三步失败,则 MySQL 在重启后会检查 xid 是否已经提交,若没有提交,也就是事务需要重新执行,就会在存储引擎中再执行一次提交操作,保障 redo log 和 binlog 数据的一致性,防止数据丢失。

实际执行还牵扯到操作系统缓存 buffer 何时同步到文件系统中,所以 MySQL 支持用户自定义在 commit 时如何将 log buffer 中的日志刷到 log file 中,通过变量 innodb_flush_log_at_trx_Commit 的值来决定。

在 log buffer 中的内容称为脏日志,感兴趣的话可以查询资料了解下。

以上就是MySQL数据库是如何实现XA规范的的详细内容,更多关于MySQL数据库XA规范的资料请关注其它相关文章!

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

mysql innodb存储引擎的深入探秘

mysql深入浅出掌握触发器用法

mysql如何把日期转换为字符串类型

mysql登录报错提示error 1045 (28000)错误的解决方法(图文)

mysql 5.7.18 利用mysql proxies_priv实现类似用户组管理实例分享

mysql快速插入千万条数据的实战教程

看看mysql备份脚本的写法

nosql与mysql的区别是什么

mysql中的启动和关闭命令

mysql在windows环境下的解压安装及备份还原详解

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...