如何區(qū)分MySQL的innodb_flush_log_at_trx_commit和sync_binlog
innodb_flush_log_at_trx_commit和sync_binlog 兩個參數(shù)是控制MySQL磁盤寫入策略以及數(shù)據(jù)安全性的關(guān)鍵參數(shù)。
show variables like "innodb_flush_log_at_trx_commit";

innodb_flush_log_at_trx_commit:
0: 由mysql的main_thread每秒將存儲引擎log buffer中的redo日志寫入到log file,并調(diào)用文件系統(tǒng)的sync操作,將日志刷新到磁盤。
1:每次事務(wù)提交時,將存儲引擎log buffer中的redo日志寫入到log file,并調(diào)用文件系統(tǒng)的sync操作,將日志刷新到磁盤。
2:每次事務(wù)提交時,將存儲引擎log buffer中的redo日志寫入到log file,并由存儲引擎的main_thread 每秒將日志刷新到磁盤。
show variables like "sync_binlog";

sync_binlog:
0 :存儲引擎不進行binlog的刷新到磁盤,而由操作系統(tǒng)的文件系統(tǒng)控制緩存刷新。
1:每提交一次事務(wù),存儲引擎調(diào)用文件系統(tǒng)的sync操作進行一次緩存的刷新,這種方式最安全,但性能較低。
n:當提交的日志組=n時,存儲引擎調(diào)用文件系統(tǒng)的sync操作進行一次緩存的刷新。
sync_binlog=0或sync_binlog大于1,事務(wù)被提交,而尚未同步到磁盤。因此,在電源故障或操作系統(tǒng)崩潰時有可能服務(wù)器已承諾尚未同步一些事務(wù)到二進制日志。因此它是不可能執(zhí)行例行程序恢復(fù)這些事務(wù),他們將會丟失二進制日志。
innodb_flush_log_at_trx_commit和sync_binlog 都為 1 時是最安全的,在mysqld 服務(wù)崩潰或者服務(wù)器主機crash的情況下,binary log 只有可能丟失最多一個語句或者一個事務(wù)。但是魚與熊掌不可兼得,雙1,1 會導(dǎo)致頻繁的io操作,因此該模式也是最慢的一種方式。
實際使用時,要考慮業(yè)務(wù)方對性能和安全性的需求,綜合考量設(shè)置,兩個參數(shù)。上圖中是我們線上機器的參數(shù)。
以上就是如何區(qū)分MySQL的innodb_flush_log_at_trx_commit和sync_binlog的詳細內(nèi)容,更多關(guān)于MySQL的innodb_flush_log_at_trx_commit和sync_binlog的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mybatis-plus如何使用sql的date_format()函數(shù)查詢數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于mybatis-plus如何使用sql的date_format()函數(shù)查詢數(shù)據(jù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02
insert...on?duplicate?key?update語法詳解
本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
mysql通過my.cnf修改默認字符集為utf-8的方法和注意事項
本文主要給大家介紹mysql通過my.cnf修改默認字符集為utf-8的方法,當然你也可以設(shè)置成別的,國際點還是utf-8好,以及在修改過程中要注意的一些事項,有需要的朋友們可以參考借鑒。2016-09-09

