MyISAM
は信頼性の高いテーブル形式ですが、(テーブルに対するすべての変更は
SQL
ステートメントから制御が戻る前に書き込まれます)それでも以下の状況が発生した場合はテーブルが破損するおそれがあります。
mysqld プロセスが書き込みの最中に強制終了された場合。
コンピューターが予期せずシャットダウンされた場合。 (例えばコンピューターの電源が切られた時。)
ハードウェアエラー
サーバー上でテーブルを修正中に外部プログラム (myisamchkなど) を利用した時。
MySQLまたは MyISAM
コードのソフトウェアバグ。
テーブルが破損すると通常次のような現象が見られます。
テーブルからデータを選択する時に次のようなエラーが表示されます。
Incorrect key file for table: '...'. Try to repair it
クエリがテーブルでレコードを検出できない、または不完全なデータを返します。
MyISAM
テーブルが破損していないかどうか CHECK
TABLE
ステートメントを利用して確認する事ができます。また、REPAIR
TABLE
を利用して破損した
MyISAM
テーブルを修復する事ができます。また、mysqld
が稼動していない時はmyisamchk
コマンドを利用して確認や修復ができます。項12.5.2.3. 「CHECK TABLE
構文」、項12.5.2.6. 「REPAIR TABLE
構文」、項7.4. 「myisamchk — MyISAM テーブル メンテナンス ユーティリティ」を参照して下さい。
もしテーブルが頻繁に破損する場合は、その原因を突き止める必要があります。最も重要なのは、サーバーのクラッシュによってテーブルが破損されたのかどうかを確認する事です。最近のエラーログの中の
restarted mysqld
メッセージを探せば簡単に検証する事ができます。もしそのようなメッセージがあれば、破損の原因はサーバーの破損によるものである可能性が高いでしょう。そうでなければ、破損は通常作業の最中に起きたという事になるでしょう。その場合はバグです。ですので、その破損のテストケースを作成してみる必要があります。項B.1.4.2. 「What to Do If MySQL Keeps Crashing」、Making a Test Case If You Experience Table Corruption
を参照して下さい。
MySQL Enterprise. 問題が発生する前にそれを発見します。サーバーの状態についての専門家のアドバイスを受ける為に、MySQL ネットワークモニタリングとアドバイザーサービスを購読してください。追加情報については http://www-jp.mysql.com/products/enterprise/advisors.htmlを参照してください。