关于控制mysql的binlog日志刷入磁盘频率的参数理解

最近一直执迷于mysql的binlog日志刷入磁盘频率的几个参数,一直无法完全理解清楚,今天反复的看官方文档,并且将看到的心得记录一二。

先说个概念:

                   数据脏页:当mysql的内存数据页和磁盘的数据不一致的时候,内存的数据,就叫做脏数据,刷盘的过程就是刷脏页。

【关于控制binlog刷入磁盘的参数】

     1.sync-binlog:控制binlog刷入磁盘的频率

          default vaule:1

       0:禁止MySQL服务器将二进制日志同步到磁盘。相反,MySQL服务器依赖于操作系统不时地将二进制日志刷新到磁盘,就像处理其他文件一样。此设置提供了最佳性能,但是在出现电源故障或操作系统崩溃时,服务器可能提交了未同步到二进制日志的事务。

     1:允许在事务提交之前将二进制日志同步到磁盘。这是最安全的设置,但是由于磁盘写操作的增加,可能会对性能产生负面影响。在出现电源故障或操作系统崩溃时,二进制日志中缺少的事务仅处于准备状态。这允许自动恢复例程回滚事务,从而保证二进制日志中没有丢失任何事务。

     N:其中N是0或1之外的值:在收集了N个二进制日志提交组之后,将二进制日志同步到磁盘。在出现电源故障或操作系统崩溃时,服务器可能提交了未刷新到二进制日志的事务。由于磁盘写操作数量的增加,该设置可能会对性能产生负面影响。值越大,性能越好,但是数据丢失的风险越大。

官方:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

    2.innodb-flush-log-at-trx-commit:(控制redo log刷新到磁盘)控制提交操作的严格的ACID遵从性和更高的性能之间的平衡,当提交相关的I/O操作被重新安排并成批执行时,可以获得更高的性能。通过更改默认值可以获得更好的性能,但是在崩溃时可能会丢失事务。

     default vaule:1

   1: 默认设置为1是完全符合ACID要求的。日志在每次事务提交时被写入并刷新到磁盘。
   0:设置为0时,每秒将日志写入并刷新到磁盘一次。没有刷新日志的事务可能在崩溃中丢失。
   2:如果设置为2,则在每个事务提交之后写入日志,并每秒刷新一次磁盘。没有刷新日志的事务可能在崩溃中丢失。

以上两个参数都是关于binlog刷入到磁盘,默认是设置成双一是最安全的,在系统崩溃的时候,数据不会丢失的。

 

 

2.开启binlog后事务的提交顺序

  1. 先记录 undo/redo log,确保日志刷到磁盘上持久存储。
  2. 更新数据记录,缓存操作并异步刷盘。
  3. 将事务日志持久化到 binlog。
  4. 提交事务,在 redo log 中写入commit记录。

参考文档:https://www.cnblogs.com/wupeixuan/p/11734501.html

                 http://blog.itpub.net/22664653/viewspace-1063134/

                https://www.cnblogs.com/mao3714/p/8734838.html  

                 https://blog.csdn.net/sofia1217/article/details/53968205

 

posted @ 2020-04-22 10:53  学的都会  阅读(925)  评论(0编辑  收藏  举报