MyISAM
のテーブルフォーマットは、きわめて信頼性の高いフォーマットです (SQL ステートメントが行うテーブルに対するすべての変更は、そのステートメントが戻る前に書き込まれます) が、それでも次の状況が発生した場合、テーブルが破損するおそれがあります。
mysqld プロセスは、書き込みの最中に強制終了されます。
コンピュータが予期せずシャットダウンされます (たとえば、コンピューターの電源が切られた場合など)。
ハードウェア障害。
サーバーが修正中のテーブルを、外部プログラム (myisamchkなど) を使用して同時に修正しています。
MySQL または
MyISAM
コードのソフトウェアバグです。
テーブルが破損した場合の典型的な兆候は、次のとおりです。
-
テーブルからデータを選択するときに、次のエラーが表示されます。
Incorrect key file for table: '...'. Try to repair it
クエリーが、テーブル内で行を検出しない、または不完全な結果を返します。
MyISAM
テーブルのヘルスを CHECK TABLE
ステートメントを利用して確認でき、破損した MyISAM
テーブルを REPAIR TABLE
を利用して修復できます。mysqld が動作していない場合は、myisamchk コマンドを利用してテーブルを確認したり修復したりすることもできます。セクション13.7.2.2「CHECK TABLE 構文」、セクション13.7.2.5「REPAIR TABLE 構文」、および セクション4.6.3「myisamchk — MyISAM テーブルメンテナンスユーティリティー」 を参照してください。
テーブルが頻繁に破損する場合は、その原因を突き止めるようにしてください。もっとも重要なのは、サーバーのクラッシュによってテーブルが破損されたかどうかを確認することです。エラーログの最新の restarted mysqld
メッセージを探すと、簡単に検証できます。このようなメッセージがある場合、テーブルの破損はサーバーのダウンによる可能性が高くなります。そうでなければ、破損は通常作業の最中に起きた可能性があります。これはバグです。問題点を明らかにする再現可能なテストケースを作成するべきです。セクションB.5.4.2「MySQL が繰り返しクラッシュする場合の対処方法」および セクション24.4「MySQL のデバッグおよび移植」を参照してください。