sync_binlog:是MySQL 的二進制日誌(binary log)同步到磁盤的頻率。數據庫
sync_binlog=0,當事務提交以後,MySQL不作fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤,而讓Filesystem自行決定何時來作同步,或者cache滿了以後才同步到磁盤。這個是性能最好的。緩存
sync_binlog=1,當每進行1次事務提交以後,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。不推薦使用,性能很差。服務器
sync_binlog=n,當每進行n次事務提交以後,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。併發
innodb_flush_log_at_trx_commit:是 InnoDB 引擎特有的,ib_logfile的刷新方式( ib_logfile:記錄的是redo log和undo log的信息)性能
innodb_flush_log_at_trx_commit=0,表示每隔1秒把log buffer刷到文件系統中(os buffer)去,而且調用文件系統的「flush」操做將緩存刷新到磁盤上去。也就是說一秒以前的日誌都保存在日誌緩衝區,也就是內存上,若是機器宕掉,可能丟失1秒的事務數據。spa
innodb_flush_log_at_trx_commit=1,表示在每次事務提交的時候,都把log buffer刷到文件系統中(os buffer)去,而且調用文件系統的「flush」操做將緩存刷新到磁盤上去。這樣的話,數據庫對IO的要求就很是高了,若是底層的硬件提供的IOPS比較差,那麼MySQL數據庫的併發很快就會因爲硬件IO的問題而沒法提高。不推薦使用,性能很差。操作系統
innodb_flush_log_at_trx_commit=2,表示在每次事務提交的時候會把log buffer刷到文件系統中去,但並不會當即刷寫到磁盤。若是隻是MySQL數據庫掛掉了,因爲文件系統沒有問題,那麼對應的事務數據並無丟失。只有在數據庫所在的主機操做系統損壞或者忽然掉電的狀況下,數據庫的事務數據可能丟失1秒之類的事務數據。這樣的好處,減小了事務數據丟失的機率,而對底層硬件的IO要求也沒有那麼高(log buffer寫到文件系統中,通常只是從log buffer的內存轉移的文件系統的內存緩存中,對底層IO沒有壓力)。日誌