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多主一从数据备份的方法教程

    Mysql多主一从数据备份的方法教程

    这篇文章主要给大家介绍了关于Mysql多主一从数据备份的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-12-12
  • MySQL数据库连接数查询、配置简单示例代码

    MySQL数据库连接数查询、配置简单示例代码

    这篇文章主要介绍了MySQL数据库连接数查询、配置的相关资料,连接数与性能密切相关,需要根据实际需求合理配置,通过设置最大连接数、使用连接池和优化应用程序连接逻辑,可以提高数据库的稳定性和性能,需要的朋友可以参考下
    2025-03-03
  • 一文带你了解MySQL之约束

    一文带你了解MySQL之约束

    在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习,需要的朋友可以参考下
    2023-06-06
  • ubuntu 16.04下mysql5.7.17开放远程3306端口

    ubuntu 16.04下mysql5.7.17开放远程3306端口

    这篇文章主要介绍了ubuntu 16.04下mysql5.7.17开放远程3306端口的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • MySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • mysql启动时报错:error while loading shared libraries: libncurses.so.5: cannot open shared object file的解决办法

    mysql启动时报错:error while loading shared li

    这篇文章主要给大家介绍了解决mysql启动时报错:error while loading shared libraries: libncurses.so.5: cannot open shared object file的方法,需要的朋友可以参考下
    2023-08-08
  • MySQL 的覆盖索引与回表的使用方法

    MySQL 的覆盖索引与回表的使用方法

    这篇文章主要介绍了MySQL 的覆盖索引与回表的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • MySQL优化全攻略-相关数据库命令

    MySQL优化全攻略-相关数据库命令

    MySQL优化全攻略-相关数据库命令...
    2006-11-11
  • golang实现mysql数据库备份的操作方法

    golang实现mysql数据库备份的操作方法

    这篇文章主要介绍了golang实现mysql数据库备份的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • MyBatis 动态SQL全面详解

    MyBatis 动态SQL全面详解

    MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦
    2021-09-09

最新评论