MySQL バージョン 3.23.13 以降、CHECK
TABLE
コマンドを使用して MyISAM
テーブルをチェックできるようになりました。See
項4.5.4. 「CHECK TABLE
構文」。 テーブルの修復は
REPAIR TABLE
コマンドで行えます。
See 項4.5.5. 「REPAIR TABLE
構文」。
問題が発生するのを待つより、定期的にテーブルチェックを行うことを推奨します。保守目的では、myisamchk
-s
を使用してテーブルをチェックできます。-s
オプション(--silent
の短縮形)を使用すると、サイレントモードで
myisamchk
が実行され、エラー発生時のみメッセージが出力されます。
また、サーバが起動するたびにテーブルをチェックするという方法もあります。
たとえば、更新の途中でマシンがリブートされた場合、影響を受けた可能性のあるテーブルをすべてチェックする必要があります(つまり、``破損の可能性があるテーブル''
をチェックします)。リブート後に古い
.pid
(プロセス
ID)ファイルが残っていた場合、mysqld_safe
にテストを追加して、直前の 24
時間以内に変更されたテーブルのチェックを
myisamchk
で実行することができます。.pid
ファイルは mysqld
起動時に作成され、正常終了時に削除されます。システム起動時に
.pid
ファイルが存在していれば、mysqld
が異常終了したことになります。
より完全なテストを行うには、.pid
ファイルの作成後に変更されたすべてのテーブルをチェックするという方法もあります。
通常のシステム運用中にも定期的にテーブルをチェックしてください。MySQL
AB では、週に一度 cron
ジョブを実行して重要なテーブルをチェックしています。crontab
ファイルは以下のようになります。
35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI
これで、クラッシュしたテーブルに関する情報が出力されるので、必要に応じて検査および修復を行えます。
ここ数年、予想外のテーブル破損(ハードウェアトラブル以外による破損)は発生していないので、当社では週に一度のチェックで十分としています。
最初のうちは、myisamchk -s
を毎晩実行して、直前の 24
時間以内に更新されたすべてのテーブルをチェックするようにします。しばらくすると、MySQL
の信頼性の高さを実感できるはずです。
通常、MySQL
テーブルの保守はそれほど頻繁に行う必要はありません。動的サイズのレコード(VARCHAR
カラム、BLOB
カラム、または
TEXT
カラム)があるテーブルを変更したり、多くのレコードが削除されたテーブルがある場合には、月に一度程度、最適化を行ってテーブルの領域を解放することを推奨します。
これを行うには、目的のテーブルで
OPTIMIZE TABLE
を実行するか、mysqld
サーバを停止して以下を実行します。
isamchk -r --silent --sort-index -O sort_buffer_size=16M */*.ISM myisamchk -r --silent --sort-index -O sort_buffer_size=16M */*.MYI
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.