myisamchk
オプション
myisamchk ユーティリティはユーザのデータベース テーブルの情報を収集し、チェック、修復、もしくは最適化します。myisamchk は MyISAM
テーブルとともに作動します(データやインデックスを記憶するための .MYD
や .MYI
テーブル)。
myisamchk は以下のように起動してください。
shell> myisamchk [options] tbl_name ...
options
は myisamchk にどういった作業をさせたいか特定します。以下のセクションで説明されています。myisamchk --help を起動することでオプションのリストを取得することができます。
オプションがない場合、myisamchk をデフォルト オペレーションとして、ユーザのテーブルをチェックします。さらに情報を取得もしくは myisamchk に修復行動をとらせるには、以下のディスカッションで説明されているようにオプションを特定してください。
tbl_name
はユーザがチェックもしくは修復したいデータテーブルになります。データベース ディレクトリ内以外で myisamchk を起動させた場合、必ずデータベース ディレクトリへのパスを特定しなければいけません。これは、myisamchk にはデータベース ディレクトリの場所がまったくわからないからです。.実際、myisamchk にとっては作業中のファイルがデータベース ディレクトリに含まれていようがいまいが、とくに関係ありません。データベース テーブルに応対するファイルは他の場所へコピーして、そこでリカバリ
オペレーションをそれらファイルにかけることができます。
myisamchk コマンド ライン上の複数のテーブルに名前をつけることができます。インデックス ファイルに名前をつけることでテーブルを特定することができます。(.MYI
接尾辞のついたファイル)。*.MYI
パターンを使用することによって、ディレクトリ内の全てのテーブルを特定することができるようになります。例えば、データベース ディレクトリ内にいるとき、以下の様にしてそのディレクトリ内の
MyISAM
テーブルをチェックすることができます。
shell> myisamchk *.MYI
データベース ディレクトリ内にいない場合、ディレクトリへのパスを特定することで全てのテーブルをチェックすることができます。
shell> myisamchk /path/to/database_dir/*.MYI
MySQL データ ディレクトリへのパスと共にワイルドカードを特定することで、全てのデータベースの全てのテーブルをチェックすることができます。
shell> myisamchk /path/to/datadir/*/*.MYI
全てのMyISAM
テーブルをチェックするお勧めの方法は以下のとおりです。
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
全ての MyISAM
テーブルをチェックし、破壊されているものを修復したい場合、以下のコマンドを使用してください。
shell>myisamchk --silent --force --fast --update-state \
--key_buffer_size=64M --sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
このコマンドの使用は 64MB 以上がフリーであることが前提です。myisamchk とメモリのアロケーションについては、詳しくは 項 「myisamchkメモリ使用量」 を参照してください。
myisamchk を起動中に、他のプログラムがテーブルを使用していないことを確認してください。でなければ、myisamchk を起動したとき、以下のエラーが表示されます。
warning: clients are using or haven't closed the table properly
これはまだファイルが閉じられていない、もしくは閉じる前に破壊されてしまった他のプログラムによって、更新されたテーブルをチェック使用としていることを意味しています。(たとえば mysqld サーバ) 。
もし mysqld が起動している場合、FLUSH TABLES
を使用して、メモリにバッファされている全てのテーブルに加えられた修正を、強制的に一挙に消去し鳴けレアいけません。myisamchk を起動中に、他のユーザがテーブルを使用していないことを確認してください。この問題を避けるには、テーブルのチェックには myisamchk の代わりに CHECK TABLE
を使用してください。