:: DEVELOPER ZONE
myisamchk は以下のように起動します。
shell> myisamchk [options] tbl_name
options は、myisamchk が実行することを指定します。それらについてはここで説明します(myisamchk --help を実行すると、オプションの一覧を取得できます)。オプションを指定しなければ、myisamchk はテーブルのチェックだけを行います。詳細情報を取得したり、myisamchk に修正を実行させるには、ここで説明するオプションを指定することが必要です。
tbl_name は、チェックおよび修復対象となるデータベーステーブル名です。データベースディレクトリ以外の場所で myisamchk を実行する場合、myisamchk に対してファイルのパスを指定する必要があります。実際、myisamchk は処理対象のファイルがデータベースディレクトリにあるかどうかを問題にしません。データベーステーブルのファイルを他の場所にコピーし、そこでリカバリ操作を実行することもできます。
myisamchk コマンドラインに複数のテーブル名を指定することもできます。また、インデックスファイル名(.MYI サフィックス付き)を指定することもできます。*.MYI パターンを使用すれば 1 つのディレクトリ内のすべてのテーブルを指定することができます。
たとえば、カレントディレクトリがデータベースディレクトリである場合、以下のようにすればディレクトリ内の全テーブルをチェックできます。
shell> myisamchk *.MYI
カレントディレクトリがデータベースディレクトリでない場合、以下のようにディレクトリのパスを指定することにより、その全テーブルをチェックできます。
shell> myisamchk /path/to/database_dir/*.MYI
MySQL データディレクトリのパスにワイルドカードを使用することにより、全データベースのすべてのテーブルをチェックすることもできます。
shell> myisamchk /path/to/datadir/*/*.MYI
すべてのテーブルに対して簡単にチェックを行う場合、以下の方法を推奨します。
myisamchk --silent --fast /path/to/datadir/*/*.MYI isamchk --silent /path/to/datadir/*/*.ISM
すべてのテーブルをチェックし、破損していたテーブルをすべて修復するには、以下を実行します。
myisamchk --silent --force --fast --update-state -O key_buffer=64M \
-O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M \
/path/to/datadir/*/*.MYI
isamchk --silent --force -O key_buffer=64M -O sort_buffer=64M \
-O read_buffer=1M -O write_buffer=1M /path/to/datadir/*/*.ISM
この例では、64 メガバイト以上の空き容量があることを前提にしています。
注意: 以下のエラーが発生する場合があります。
myisamchk: warning: 1 clients is using or hasn't closed the table properly
これは、他のプログラム(mysqld サーバなど)によって更新されてまだ閉じられていないファイル、または正しく閉じられていないファイルのテーブルをチェックしようとしているということです。
mysqld を実行中であれば、FLUSH TABLES ですべてのテーブルの同期とクローズを強制的に実行し、myisamchk を実行する間は他のだれにもテーブルを使用させないようにしてください。MySQL バージョン 3.23 で、この問題を回避する最も簡単な方法は、myisamchk の代わりに CHECK TABLE を使用してテーブルをチェックすることです。
© 1995-2005 MySQL AB. All rights reserved.
