問題が発生する前に、テーブル
チェックを定期的に行います
(推奨)。MyISAM
テーブルをチェックまたは修復するには、CHECK
TABLE
および REPAIR TABLE
ステートメントを使用します。詳細は、項12.5.2.3. 「CHECK TABLE
構文」
と 項12.5.2.6. 「REPAIR TABLE
構文」
を参照してください。
別の方法としては、myisamchk
を使用してテーブル
チェックを行います。保守を目的とする場合は、myisamchk
-s を使用します。-s
(--silent
の短縮形)を使用すると、サイレントモードで
myisamchk
を実行でき、エラー発生部分のメッセージを出力します。
MyISAM
のテーブル
チェックには自動化をお勧めします。自動チェックを有効にしておくと、「予期していないテーブル
クラッシュ」
などでマシンが更新中であるにもかかわらず、再起動した場合などに、それぞれのテーブルをチェックする手間を省いて、影響があったテーブルを探すことができます。MyISAM
テーブルの自動化設定を行うには、サーバを
--myisam-recover
オプションで起動してください。詳細は、項4.2.2. 「コマンド オプション」
を参照してください。
テーブル
チェックは日常的に行うことをお勧めします。MySQL
AB
では、一週間に一度、重要なテーブルに対して、cron
コマンドを使用して確認作業を行っています。たとえば、crontab
ファイルでは、次のようにしています。
35 0 * * 0/path/to/myisamchk
--fast --silent/path/to/datadir
/*/*.MYI
この出力には、クラッシュしたテテーブルの情報が出るため、必要に応じて、確認や修復の作業ができます。
実際に、MySQL AB ではここ数年間、ハードウェアの故障以外のテーブル クラッシュは発生していないため、一週間に一度という頻度がその有効性を示しています。
MySQL AB 自体では、この方法でテーブル チェックを行っていますが、実際、ユーザがこの作業を行うときは、MySQL を完全に信用できると確証できるまでは、myisamchk -s を1 日 1 度、行うことをお勧めします。
VARCHAR
、BLOB
、TEXT
などのテーブルで、MyISAM
テーブルを動的レコードで更新していたり、テーブルに削除できるレコードが沢山あっても、時々そのテーブルでデフラグやリクレーム
(返還) を行なっていれば、MySQL
テーブルの保守は簡単に行なえます。これができるようにするには、対象となるテーブルに
OPTIMIZE TABLE
を使用します。または、しばらくの間、mysqld
サーバを停止することが可能な場合は、そのサーバを止めて、場所をデータ
ディレクトリに置き換えて、次のコマンドを使用します。
shell> myisamchk -r -s --sort-index --sort_buffer_size=16M */*.MYI