MyISAMテーブルは非常に簡単にクラッシュします。MyISAMテーブルが持つオープンファイルハンドルの数を追跡するヘッダー情報が各テーブルにあります。
mysqldがクラッシュした場合、ファイルハンドルを開いているMyISAMテーブルには、ファイルハンドルを閉じるたびにファイルハンドル数をデクリメントする機会がありませんでした。したがって、新しいファイルハンドルがMyISAMテーブル(.MYDファイル)を開き、mysqldがMyISAMテーブルが開いていると信じるファイルハンドルの数とMyISAMテーブルが実際に開いているファイルハンドルの数の不一致を検出した場合、テーブルは次のようになります。クラッシュしたと宣言しました。
これを処理するには、次の4つの方法があります。
方法1:MyISAMの自動修復を設定する
MySQLの再起動時にこれを設定する方法については、私の投稿https://dba.stackexchange.com/a/15079/877を参照してください(2012年3月15日)
方法2:MyISAMの代わりにInnoDBを使用する
InnoDBには、ストレージエンジンの初期化に組み込まれたクラッシュリカバリがあります。MyISAMはしません
方法3:MyISAMの代わりにAriaを使用する
Ariaは、MariaDBのMyISAMのドロップイン代替品です。個々のテーブルのクラッシュリカバリメカニズムを備えています。
方法4:mysqldで-9を殺さないでください
mysqldが故意または非自発的にクラッシュした場合、開いているすべてのMyISAMテーブルのヘッダー情報により、それらがクラッシュ状態になります。mysqldを手動で強制終了する必要はありません。