mysql binlog提交过程1

本文详细介绍了MySQL的二阶段提交(2PC)协议及其在保证binlog和redo log一致性上的应用,以及MySQL的组提交(3PC)机制在5.6和5.7版本的改进。讨论了如何通过sync_binlog和innodb_flush_log_at_trx_commit参数影响刷盘行为,并分析了组提交对性能的影响和潜在问题。
摘要由CSDN通过智能技术生成

1.什么是2PC

2PC,二阶段提交协议,事务的提交过程分为两个阶段来进行处理:准备阶段和提交阶段

阶段1:准备阶段 
1、协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复。  
2、各参与者执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务)。  
3、如参与者执行成功,给协调者反馈YES,即可以提交;如执行失败,给协调者反馈NO,即不可提交。

阶段2:提交阶段   
此阶段分两种情况:所有参与者均反馈YES、或任何一个参与者反馈NO。  
所有参与者均反馈YES时,即提交事务。  
任何一个参与者反馈NO时,即中断事务。

这也是一种思想,自己去实现分布式事务等或者在一些特殊情况下的程序涉及都可能涉及到。

2.MySQL 2PC

如何保证binlog和redo log的一致性。因为binlog是Master-Slave的桥梁,如果顺序不一致,意味着Master-Slave可能不一致.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Lb2vskU-1617802871224)(evernotecid://D9EA7A5E-50CA-4088-B690-FE4E2A69942F/appyinxiangcom/12289885/ENResource/p261)]

第一种情况,如果先写了redo log 后写binlog :如果redo 写完了,但是再写binlog的时候cash了。这时候如果需要重备份中恢复,这样使用binlog恢复会少了会后一次事务的值
第二种情况,如果先写binlog ,后写redo:如果binlog写完了,写redo cash 了。这样原库里面会多了一个事务。其实应用这笔是认为没有成功。

MYSQL通过两阶段提交很好地解决了这一问题。Prepare阶段,innodb写redo log,并将回滚段设置为Prepared状态,返回ok commit阶段 写binlog,这边的理解是写到binlog buffer,再执行刷盘 ,然后江redo设置提交状态 刷盘。

如果在Prepare阶段 cash ,则去对比binlog中如果存在提交,如果binlog不存在则回滚,这样保证了主从的一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值