如何區分MySQL的innodb_flush_log_at_trx_commit和sync_binlog

innodb_flush_log_at_trx_commit和sync_binlog  兩個參數是控制MySQL磁盤寫入策略以及數據安全性的關鍵參數。

show variables like “innodb_flush_log_at_trx_commit”;

innodb_flush_log_at_trx_commit:

0: 由mysql的main_thread每秒將存儲引擎log buffer中的redo日志寫入到log file,並調用文件系統的sync操作,將日志刷新到磁盤。

1:每次事務提交時,將存儲引擎log buffer中的redo日志寫入到log file,並調用文件系統的sync操作,將日志刷新到磁盤。

2:每次事務提交時,將存儲引擎log buffer中的redo日志寫入到log file,並由存儲引擎的main_thread 每秒將日志刷新到磁盤。

show variables like “sync_binlog”;

sync_binlog:

0 :存儲引擎不進行binlog的刷新到磁盤,而由操作系統的文件系統控制緩存刷新。

1:每提交一次事務,存儲引擎調用文件系統的sync操作進行一次緩存的刷新,這種方式最安全,但性能較低。

n:當提交的日志組=n時,存儲引擎調用文件系統的sync操作進行一次緩存的刷新。

sync_binlog=0或sync_binlog大於1,事務被提交,而尚未同步到磁盤。因此,在電源故障或操作系統崩潰時有可能服務器已承諾尚未同步一些事務到二進制日志。因此它是不可能執行例行程序恢復這些事務,他們將會丟失二進制日志。

innodb_flush_log_at_trx_commit和sync_binlog 都為 1 時是最安全的,在mysqld 服務崩潰或者服務器主機crash的情況下,binary log 隻有可能丟失最多一個語句或者一個事務。但是魚與熊掌不可兼得,雙1,1 會導致頻繁的io操作,因此該模式也是最慢的一種方式。

實際使用時,要考慮業務方對性能和安全性的需求,綜合考量設置,兩個參數。上圖中是我們線上機器的參數。

以上就是如何區分MySQL的innodb_flush_log_at_trx_commit和sync_binlog的詳細內容,更多關於MySQL的innodb_flush_log_at_trx_commit和sync_binlog的資料請關註WalkonNet其它相關文章!

推薦閱讀: