MyISAM は信頼性の高いテーブル形式ですが(テーブルに対するすべての変更は SQL ステートメントから制御が戻る前に書き込まれます)、それでも以下の状況が発生した場合はテーブルが破損するおそれがあります。
書き込みの途中で mysqld
プロセスが強制終了された場合。
コンピュータが予期せずシャットダウンされた場合(コンピュータの電源が切られた場合など)。
ハードウェアエラー。
稼働中のテーブルで外部プログラム(myisamchk など)を使用した場合。
MySQL または MyISAM コードのソフトウェアバグ。
テーブルが破損すると、一般に次のような現象が見られます。
テーブルからデータを選択するときに、Incorrect
key file for table: '...'. Try to repair it
というエラーが表示される。
クエリがテーブルでレコードを検出できない、または不完全なデータを返す。
テーブルが破損していないかどうかは、CHECK
TABLE
コマンドで確認できます。 See
項4.5.4. 「CHECK TABLE
構文」。
破損したテーブルは、REPAIR TABLE
で修復できます。 See 項4.5.5. 「REPAIR TABLE
構文」。
また、mysqld
が稼働していないときに、myisamchk
コマンドを使ってテーブルを修復することもできます。
myisamchk syntax
。
テーブルが大きく破損している場合は、原因を突き止める必要があります。 See 項A.4.1. 「MySQL が何度もクラッシュする場合に行うこと」。
この場合に最も重要なのは、mysqld
が強制終了されたときにテーブルが破損したのかを確認することです(これは、mysqld
エラーファイルに restarted mysqld
という行が最近記録されたかどうかをチェックすることで簡単に検証できます)。これが該当しない場合は、その破損のテストケースを作成してみる必要があります。
See 項E.1.6. 「テーブルが破損した場合にテストケースを作成する」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.