このセクションでは、MySQL がディスク満杯エラー (「デバイスに領域が残っていない」など)、および割り当て超過エラー (「書き込みに失敗しました」、「ユーザーブロックの制限に達しました」など) に対処する方法について説明します。
このセクションは、MyISAM
テーブルへの書き込みに関連しています。 「行」および「レコード」への言及が「イベント」を意味すると理解する必要があることを除き、バイナリログファイルおよびバイナリログインデックスファイルへの書き込みにも当てはまります。
ディスク満杯状態が発生すると、MySQL は次のことを行います。
現在の行を書き込むための十分な領域があるかどうかを 1 分おきに確認します。 十分な領域がある場合は、何事もなかったかのように稼働し続けます。
ディスク満杯状態について警告するエントリをログファイルに 10 分おきに書き込みます。
問題を軽減するには次のアクションを行います。
続行する場合は、すべてのレコードを挿入するための十分なディスク領域を解放する必要があるだけです。
または、スレッドを中止するには mysqladmin kill を使用します。 スレッドは次回ディスクがチェックされるとき (1 分以内) に中止されます。
ほかのスレッドが、ディスク満杯状態の原因となったテーブルを待機している可能性があります。 複数の「ロックされた」スレッドがある場合は、ディスク満杯状態を待機していた 1 つのスレッドを強制終了すると、ほかのスレッドが続行できるようになります。
前述の動作の例外は、REPAIR TABLE
または OPTIMIZE TABLE
を使用する場合、または LOAD DATA
の後または ALTER TABLE
ステートメントの後にインデックスがバッチで作成される場合です。 これらのすべてのステートメントでは大きい一時ファイルが作成されることがあり、それがそのまま残された場合、システムのほかの部分で大きな問題となる可能性があります。 MySQL がこれらのいずれかの操作を実行していて、ディスクが満杯になった場合は、大きい一時ファイルが削除され、テーブルがクラッシュとしてマークされます。 例外は ALTER TABLE
の場合で、古いテーブルは変更されないままになります。