Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


15.2.4.1 MyISAM テーブルの破損

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 のデバッグおよび移植」を参照してください。


User Comments
  Posted by NOT_FOUND NOT_FOUND on March 29, 2004
if you set
[mysqld]
ft_min_word_len=3

you should also set
[myisamchk]
ft_min_word_len=3

if you use myisamchk
  Posted by Harel Malka on October 13, 2004
I ran into a case where a large myiasm table threw the above error when it was included inside a transaction (by mistake) along with other innoDB tables. A bunch of mass deletes were taking place, and the operation always ended with the table corrupted.
A quick conversion to innoDB solved the problem:

ALTER TABLE tablename TYPE=InnoDB;
  Posted by Cherry Austin on July 13, 2005
Thanks for that! I had a tiny MyISAM table but, all the same, queries were sometimes taking too long to execute & the container page wouldn't load properly. Changed to INNO-DB, problem cleared!
  Posted by Piotr SaÅ‚aciak on December 11, 2010
When You are using a trigger (or triggers) with Your MyISAM tables they may be "unrepairable" when they become corrupted. In such a case, You should physically delete all trigger files from database directory (eventually run DROP TRIGGER command), then run REPAIR statement and finally define Your trigger again.
Sign Up Login You must be logged in to post a comment.