innodb_flush_log_at_trx_commit=0 に設定しても安全でしょうか?

innodb_flush_log_at_trx_commit=0 に設定しても安全でしょうか?

RAID コントローラにバッテリ バックアップ書き込みキャッシュを備えたサーバー (Dell PE2950) があります。

データ ファイルが 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 が処理できるのはそのうちの 1 つ、つまりディスク障害のみです。ファイル システムがクラッシュしたり、誤ってデータを削除したり、MySQL の不明なバグによってデータ ファイルが破損したりする可能性があります。そのため、を使用して重要なデータのバックアップを忘れずに取ってくださいmysqldump。MySQL が停止していない限り、データ ファイルをコピーしないでください。データ ファイルは不整合になる可能性があります。

答え2

安全性とパフォーマンスを確保するには、innodb_flush_log_at_trx_commit=1 と RAID 10 を使用する必要があります。

乾杯

関連情報