設定 innodb_flush_log_at_trx_commit=0 是否安全?

設定 innodb_flush_log_at_trx_commit=0 是否安全?

我有一台伺服器 (Dell PE2950),其 raid 控制器上帶有電池支援的寫入快取。

我在資料檔案儲存在 raid0 磁碟區上的 mysql 伺服器上設定 innodb_flush_log_at_trx_commit=0 安全性嗎?

如果卷是 raid1/5/10 會有不同的答案嗎?

謝謝!

答案1

如果您擔心丟失數據,那是不安全的。根據手冊,事務可能已提交,但尚未寫入磁碟 - 僅存在於記憶體中。這意味著 mysqld 崩潰或作業系統崩潰或電源故障可能會導致交易遺失。

在某些系統中,丟失交易可能是可以接受的,只要交易要么完全丟失,要么完全保留。在這種情況下,您可以關閉此設定。

電池支援的 RAID 控制器的相關性在於控制器上的安全寫入快取。如果控制器會快取寫入但斷電(沒有電池),則會遺失寫入快取中的資料。但是,MySQL 已經期望它安全地儲存在磁碟上。因此,電池允許安全地使用 RAID 控制器中的寫入快取。通常,控制器有一個設置,可以在電池電量過低時自動停用寫入快取。

RAID 等級沒有直接關係。如果資料在磁碟上,則它在磁碟上。如果你失去動力,它就會安全。 RAID 等級真正重要的地方是磁碟是否損壞——這是一種完全不同的故障模式。如果是RAID0,顯然所有資料都會立即遺失。如果是 RAID5,您可能會繼續遭受較大的效能損失。使用 RAID1/10,您可以繼續使用非常小的效能損失。

但是,不要將 RAID 誤認為備份。資料庫伺服器有幾十種故障模式,而 RAID 只處理其中一種:磁碟故障。您的檔案系統可能會崩潰,您可能會意外刪除數據,您的資料檔案可能會因為一個不起眼的 MySQL 錯誤而損壞。因此,不要忘記使用mysqldump.切勿複製資料文件,除非 MySQL 停止,因為它們可能不一致。

答案2

為了安全和高效能,您應該設定 innodb_flush_log_at_trx_commit=1 和 RAID 10。

乾杯

相關內容