問題が発生するのを待つより、テーブルチェックを定期的に実行することをお勧めします。 MyISAM
テーブルをチェックまたは修復する 1 つの方法は、CHECK TABLE
および REPAIR TABLE
ステートメントを使用することです。 セクション13.7.3「テーブル保守ステートメント」を参照してください。
テーブルをチェックする別の方法は、myisamchk を使用することです。 保守の目的には、myisamchk -s を使用できます。 -s
オプション (--silent
の短縮形) により、サイレントモードで myisamchk が実行され、エラーが発生した場合のみ、メッセージが出力されます。
自動 MyISAM
テーブルチェックを有効にすることをお勧めします。 たとえば、マシンが更新の途中で再起動を実行した場合、通常、影響を受けた可能性のある各テーブルが使用される前に、それをチェックする必要があります。 (これらは「「クラッシュしたテーブルが必要です。」」) サーバーが MyISAM
テーブルを自動的にチェックするようにするには、myisam_recover_options
システム変数を設定して起動します。 セクション5.1.8「サーバーシステム変数」を参照してください。
通常のシステム操作時にも定期的にテーブルをチェックしてください。 たとえば、crontab
ファイル内の次のような行を使用して、週 1 回 cron ジョブを実行し、重要なテーブルをチェックします。
35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI
これはクラッシュしたテーブルに関する情報を出力するため、テーブルを調査し、必要に応じて修復できます。
はじめに、過去 24 時間中に更新されたすべてのテーブルに対して、毎晩 myisamchk -s を実行します。 その問題がまれにしか発生しないことがわかったら、チェックの頻度を週 1 回などに減らすことができます。
通常、MySQL テーブルはほとんど保守が必要ありません。 動的サイズの行のある MyISAM
テーブル (VARCHAR
、BLOB
、または TEXT
カラムのあるテーブル) に何回も更新を実行するか、または多くの削除された行のあるテーブルがある場合、ときどきテーブルの領域をデフラグ/再利用する必要がある場合があります。 これは、問題のテーブルに OPTIMIZE TABLE
を使用して実行できます。 または、しばらくの間、mysqld サーバーを停止できる場合は、サーバーの停止中に、場所をデータディレクトリ内に変更し、次のコマンドを使用します。
shell> myisamchk -r -s --sort-index --myisam_sort_buffer_size=16M */*.MYI