問題が発生するのを待つより、テーブルチェックを定期的に実行することをお勧めします。MyISAM
テーブルをチェックまたは修復する 1 つの方法は、CHECK TABLE
および REPAIR TABLE
ステートメントを使用することです。セクション13.7.2「テーブル保守ステートメント」を参照してください。
テーブルをチェックする別の方法は、myisamchk を使用することです。保守の目的には、myisamchk -s を使用できます。-s
オプション (--silent
の短縮形) により、サイレントモードで myisamchk が実行され、エラーが発生した場合のみ、メッセージが出力されます。
自動 MyISAM
テーブルチェックを有効にすることをお勧めします。たとえば、マシンが更新の途中で再起動を実行した場合、通常、影響を受けた可能性のある各テーブルが使用される前に、それをチェックする必要があります。(これらは「予期されるクラッシュしたテーブル」です。) サーバーにMyISAM
テーブルを自動的にチェックさせるには、それを --myisam-recover-options
オプションを付けて起動します。セクション5.1.3「サーバーコマンドオプション」を参照してください。
通常のシステム操作時にも定期的にテーブルをチェックしてください。たとえば、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