myisamchk — MyISAM テーブル メンテナンス ユーティリティ

myisamchk 一般的なオプション
myisamchk チェック オプション
myisamchk修復オプション
他の myisamchk オプション
myisamchkメモリ使用量

myisamchk ユーティリティはユーザのデータベース テーブルの情報を収集し、チェック、修復、もしくは最適化します。myisamchkMyISAM テーブルとともに作動します(データやインデックスを記憶するための .MYD.MYI テーブル)。

myisamchk は以下のように起動してください。

shell> myisamchk [options] tbl_name ...

optionsmyisamchk にどういった作業をさせたいか特定します。以下のセクションで説明されています。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 を使用してください。