MySQL 8.0 リファレンスマニュアル


16.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.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 のデバッグ」を参照してください。


関連キーワード:  テーブル, ストレージ, エンジン, 破損, FEDERATED, ステートメント, セクション, サーバー, 作成, TABLE