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.3.2「CHECK TABLE ステートメント」、セクション13.7.3.5「REPAIR TABLE ステートメント」、およびセクション4.6.4「myisamchk — MyISAM テーブルメンテナンスユーティリティー」を参照してください。
テーブルが頻繁に破損する場合は、その原因を突き止めるようにしてください。 最も重要なことは、予期しないサーバー終了の結果としてテーブルが破損したかどうかです。 エラーログの最新の restarted mysqld
メッセージを探すと、簡単に検証できます。 このようなメッセージがある場合、テーブルの破損はサーバーのダウンによる可能性が高くなります。 そうでなければ、破損は通常作業の最中に起きた可能性があります。 これはバグです。 問題点を明らかにする再現可能なテストケースを作成するべきです。 セクションB.3.3.3「MySQL が繰り返しクラッシュする場合の対処方法」およびセクション5.9「MySQL のデバッグ」を参照してください。