一个redo和binlog两段提交的思考

文章探讨了MySQL中事务的提交流程,涉及redo和binlog的写入策略,以及参数innodb_flush_log_at_trx_commit和sync_binlog的影响。在不同设置下,分析了主从数据一致性可能遇到的问题,并提出了降低数据丢失风险的建议,如采用innodb_flush_log_at_trx_commit=2和sync_binlog=N的组合。
摘要由CSDN通过智能技术生成

对于事务提交,是这样一个流程:
1.发出commit语句;
2.redo进入prepare阶段;
3.写binlog;
4.redo进入commit阶段;
5.事务完成提交

还有两个参数有关联,
1.innodb_flush_log_at_trx_commit
各取值含义:
0,事务提交时,将redo保留在redo buffer,redo日志既不write到OS cache,也不fsync到磁盘,等待MySQL后台线程每秒对redo buffer执行write&fsync;
1,事务提交时,将redo buffer执行write & fsync;
2,事务提交时,将redo buffer执行write到OS cache,但不执行fsync

2.sync_binlog
0,事务提交时,将binlog cache执行write到OS cache,但不执行fsync;
1,事务提交时,将binlog cache执行write & fsync;
N,每提交N个事务,将binlog cache执行write & fsync

那么在实例异常关闭,重启时执行实例恢复,是这样判断一个事务是否已提交:
1.如果存在commit阶段的redo,就认为是已提交的事务;
2.如果存在prepare阶段的redo,又存在对应的binlog,就认为是已提交的事务;
3.如果存在prepare阶段的redo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值