欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

MySQL中的binlog刷盘机制解读

2025年08月17日 Mysql
一、binlog刷盘机制binlog是由mysql的server层提供出来一种日志记录方式,是所有引擎共用的,不是只属于innodb引擎。binlog同样提供了3种同步机制,通过配置文件中sync_b

一、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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。