本篇文章给大家分享的是有关二阶段提交在MySQL中的广义应用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。二阶段提交介绍
事务发起者(AP):定义事务边界(开始、结束),并操作事务边界内的资源。事务协调者(TM):负责管理事务(提交、回滚),监控事务执行进度,分为事务唯一标识事务参与者(RM):根据“事务协调者”命令进行操作,管理本地共享资源,记录执行日志TM:对RM发送Prepare指令,等待RM的回执(ACK)RM:接收TM发送的指令,锁定资源,执行事务操作,但不提交。记录撤销日志和重做日志,如果事务执行成功,回复“是”;如失败,回复“否”TM:如果接收到了所有RM的“是”回执,发送Commit给RM;如果在超时时间内有RM没有任何回执,或者有RM回复了“否”,发送Rollback给RM。RM:根绝TM发送的指令执行Commit或者Rollback操作,针对Rollback操作,RM使用表决阶段记录的撤销日志。操作完成后给TM发送回执“OK”。如果收不到指令,一直等待。– 二阶段提交的应用 –– MySQL中binlog和redo log的二阶段提交广义应用 –MySQL的双日志(binlog 和 redo log)记录采用二阶段提交保证数据的强一致性。binlog是由MySQL Server层记录,与任何存储引擎无关。binlog主要记录的是操作日志,有三种格式:Statement、Row、Mixedlevel。binlog的主要用途是故障恢复、主从同步。如果是先写binlog 再写 redo log。当binlog写入成功后,redo log未写入成功,主节点宕机,此时分两个状态:
事务执行中,由于Innodb存储引擎的恢复是基于redo log的,此时master和slave都没有该数据,数据是一致的。事务已提交,master基于redo log的恢复后的数据和slave中的数据会出现不一致问题。如果先写redo log再写binlog。当redo log写入成功后,主节点宕机,此时分两种状态:
事务执行中,由于当前事务没有提交,基于redo log恢复,未提交的时候不会写入,slave和master都没有该数据,数据是一致的。事务已提交,redo log的事务已提交,binlog 记录的事务没有提交,master节点重启后,该数据会写入master节点,而slave节点没有,数据不一致。综上所述,只有事务处于已提交状态的情况下,才会出现数据不一致问题。 香港云主机为了保证数据一致性。事务提交时,redo log和binlog的Commit操作需要在同一个事务里,由于binlog和redo log由不同的层记录,需要分布式事务,为了保证数据一致性,二阶段提交满足这样的需求场景。– MySQL二阶段提交特殊性 –常规二阶段提交协议中,TM发个Prepare信息给RM是串行有序的。MySQL中,Server 先发给redo log 进行Prepare fsync操作(数据写入磁盘)
常规二阶段提交协议中,TM发个Commit信息给RM是无序的,不用关注RM发送的先后顺序。MySQL的二阶段,Server 先发给binLog 进行write + fsync进行合并操作,然后在通知redo log进行Commit。少一次交互(对于分布式事务来说就少一次网络io)少一次持久化操作(少一次磁盘io)
以上就是二阶段提交在MySQL中的广义应用是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。
这篇文章将为大家详细讲解有关笔记本电脑怎么升级内存,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、首先查明是否还有可用的内存插槽在确定要增加内存条后,需要了解电脑主板剩余可用内存插槽数量。目前的笔记本电脑一般都是提供2个内…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。