6

私はMySQLデータベースにかなり慣れていません。MySQL から、テーブルがクラッシュしているとマークされており、修復する必要があるというエラーが繰り返し表示されます。ただし、コマンド myisamchk を使用して、クラッシュしたテーブルを修復できます。ところで、MySQL で MYISAM データベース エンジンを使用しています。

どのような状況で DB テーブルがクラッシュするのか、またそれを防ぐにはどうすればよいのかを知りたいだけでした。

mysqltcl ライブラリ (3.0) を使用して、Tcl (8.5) スクリプトから MySQL (5.0) データベースに接続しています。

4

1 に答える 1

11

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を手動で強制終了する必要はありません。

于 2012-08-08T17:08:02.077 に答える