MySQL中的binlog刷盘机制解读
更新时间:2025年08月15日 16:29:26 作者:小志的博客
MySQL binlog由server层提供,支持三种刷盘策略:sync_binlog=0(性能高但可能丢失)由操作系统决定刷盘时机;=1(最安全)每次提交强制刷盘;=2(折中)每N次提交后刷盘,5.7.7前默认0,之后默认1
一、binlog刷盘机制
- binlog是由mysql的server层提供出来一种日志记录方式,是所有引擎共用的,不是只属于innoDB引擎。
- binlog同样提供了3种同步机制,通过配置文件中sync_binlog属性的实现的刷盘策略。

二、sync_binlog属性提供的3种刷盘策略
- sync_binlog=0 操作系统决定(实时写,延迟刷)。
由server层的执行器在提交了事务之后,写到PageCache,再由操作系统决定什么时候调用fsync函数将 binlog 写入到磁盘(性能最高,但宕机可能丢失部分 binlog)

- sync_binlog=1 提交时写入(实时写、实时刷)。
每次事务提交时都强制刷新 binlog 到磁盘(最安全,但性能较低)

- sync_binlog=2 n次事务提交(实时写、延迟刷)。
由server层的执行器在提交了N次事务之后,写到PageCache,再由操作系统决定什么时候调用fsync函数将 binlog 写入到磁盘(折中方案,平衡安全性和性能)

- mysql5.7.7以前的版本默认使用sync_binlog=0
- mysql5.7.7以后的版本默认使用sync_binlog=1
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
mysql 如何使用JSON_EXTRACT() 取json值
这篇文章主要介绍了mysql如何使用JSON_EXTRACT() 取json值的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-07-07
mysql启动的error 2003和1067错误问题解决方法
mysql安装好经常发现无法正常启动碰到最多的是error 2003的错误,经研究在此附上解决方法,希望可以帮助有类似问题的朋友2013-09-09


最新评论