MySQL:是否sync_binlog 0延迟复制?

如果我们将sync_binlog设置为0(可以延迟将二进制日志同步到磁盘的操作系统),是否会在从服务器复制这些二进制日志所需的时间内引入任何延迟? 换句话说,二进制日志可能在被刷新到磁盘之前转发到从属服务器?

不,不应该。

MySQL仍然像以前一样写入二进制日志,它根本不会调用同步本身。 这是让文件系统刷新到磁盘 。 MySQL不直接从磁盘读取数据,而是在调用同步之前从已有数据的虚拟文件系统层读取数据(如果调用的话)。

我能想到的唯一主要缺点是将其设置为0,如果发生崩溃或中断了对底层存储的访问,则可能会丢失尚未刷新到磁盘的数据。 作为交换,你将有更less的同步,这可能会提高性能的底层存储。

将其设置为0只是让操作系统像其他应用程序一样处理同步。 设置为1将提供绝对最耐用,但性能可能会受到一定程度的影响。

我使用sync_binlog = 0运行我的生产服务器,并且从来没有注意到任何延迟。 如果您的底层存储非常慢,将其提高到0以上可能会导致可衡量的延迟。

fdatasync(2)的联机帮助页可能会帮助您更好地理解。

我知道,回答这个问题有点迟,但是要快速参考一下。

我从abdel-mawla (好文章!)中看到的一个链接,当sync_log被标记为“0”和“1”时,显示“吞吐量”比较:

http://www.fromdual.com/galera-cluster-vs-pxc-vs-mariadb-galera-cluster-benchmarking

另外,从MySQL文档中可以看出,MySQL 5.7.7默认值为1,这会影响性能。