[MySQL]innodb_flush_log_at_trx_commit与sync_binlog

1 innodb_flush_log_at_trx_commit 辨析

innodb_flush_log_at_trx_commit = 0 :
    每秒将日志缓冲区写入log file,并同时flush到磁盘。跟事务提交无关。(crash可能丢失事务日志)
    在机器crash并重启后,会丢失一秒的事务日志数据(并不一定是1s,也许会有延迟,跟操作系统调度有关)

innodb_flush_log_at_trx_commit = 1:
    每次事务提交将日志缓冲区写入log file,并同时flush到磁盘。(crash不会丢失事务日志)

innodb_flush_log_at_trx_commit = 2:
    每次事务提交将日志缓冲区写入log file,每秒flush一次到磁盘。(crash有可能丢失数据)

2 sync_binlog 辨析

innodb_flush_log_at_trx_commit=1 将事务日志从日志缓存区(innodb log buffer)写入到日志文件,并刷新到磁盘上

sync_binlog = 0  由文件系统决定将binlog同步到硬盘。(mysql默认值 )
sync_binlog = 1  每提交一次事务,写一次binlog,并使用fdatasync()同步到硬盘。
sync_binlog > 1  每提交一次事务,写一次binlog,达到sync_binlog 设定的值后,调用fdatasync()同步到硬盘。

3 参考文献

原文地址:https://www.cnblogs.com/johnnyzen/p/13458035.html