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
を使用してテーブルをチェックすることです。
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.