myisamchk ユーティリティーは、データベーステーブルに関する情報を取得したり、データベーステーブルのチェック、修復、または最適化を実行したりします。myisamchk は MyISAM
テーブル (データおよびインデックスの保存のための .MYD
および .MYI
ファイルを持つテーブル) に機能します。
さらに、CHECK TABLE
および REPAIR TABLE
ステートメントを使用して、MyISAM
テーブルをチェックして修復することもできます。 セクション13.7.3.2「CHECK TABLE ステートメント」およびセクション13.7.3.5「REPAIR TABLE ステートメント」を参照してください。
myisamchk をパーティション化されたテーブルに対して使用することはサポートされていません。
テーブルの修復操作を実行する前に、テーブルのバックアップを作成することをお勧めします。状況によっては、この操作のためにデータ損失が発生することがあります。 考えられる原因としては、ファイルシステムのエラーなどがありますがこれに限りません。
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 --myisam_sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
このコマンドは 64M バイト以上の空きがあることが前提です。 myisamchk とメモリーの割り当ての詳細は、セクション4.6.4.6「myisamchk メモリー使用量」を参照してください。
myisamchk の使用に関する詳細は、セクション7.6「MyISAM テーブルの保守とクラッシュリカバリ」を参照してください。
myisamchk の実行中にほかのプログラムがテーブルを使用しないことを、保証する必要があります。 そのためのもっとも効果的な方法は、myisamchk の実行中に MySQL サーバーをシャットダウンするか、または myisamchk が対象とするすべてのテーブルをロックする方法です。
そうしないと、myisamchk を起動したとき、次のエラーが表示されることがあります。
warning: clients are using or haven't closed the table properly
これは、別のプログラム (mysqld サーバーなど) がテーブルを更新し、そのファイルをまだ閉じていないか、ファイルを適切に閉じずに異常終了したテーブルをチェックしようとしていることを意味します。この場合、1 つまたは複数の MyISAM
テーブルが破損することがあります。
mysqld が稼働している場合、FLUSH TABLES
を使用して、メモリーにバッファリングされているテーブルに加えられた変更があれば、それをフラッシュするように命令する必要があります。 そのあと、myisamchk の実行中にほかのプログラムがテーブルを使用しないことを、保証する必要があります。
ただし、この問題を回避するもっとも簡単な方法は、myisamchk ではなく CHECK TABLE
を使用してテーブルをチェックする方法です。 セクション13.7.3.2「CHECK TABLE ステートメント」を参照してください。
myisamchk は次のオプションをサポートします。これらはコマンド行または任意のオプションファイルの [myisamchk]
グループで指定できます。 MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.2.2「オプションファイルの使用」を参照してください。
表 4.19 「myisamchk のオプション」
オプション名 | 説明 |
---|---|
--analyze | キー値の分布を分析 |
--backup | .MYD ファイルのバックアップを file_name-time.BAK として作成 |
--block-search | 指定されたオフセットのブロックが属するレコードを検索 |
--check | テーブルにエラーがないか確認 |
--check-only-changed | 最後に行われた検査以降に変更されたテーブルのみをチェック |
--correct-checksum | テーブルのチェックサム情報を修正 |
--data-file-length | データファイルの最大長 (データファイルがいっぱいになったとき再作成する場合) |
--debug | デバッグログの書込み |
--decode_bits | Decode_bits |
--defaults-extra-file | 通常のオプションファイルに加えて、名前付きオプションファイルを読み取ります |
--defaults-file | 指名されたオプションファイルのみを読み取る |
--defaults-group-suffix | オプショングループのサフィクス値 |
--description | テーブルの説明情報を出力 |
--extend-check | データファイルからすべての行をリカバリする修復を試みる、非常に徹底したテーブルチェックを実行または修復を実行 |
--fast | 正しく閉じられていないテーブルのみをチェック |
--force | myisamchk がエラーをテーブル内で発見した場合、自動的に修復オペレーションを実行する。 |
--force | 古い一時ファイルを上書き。 -r オプションまたは -o オプションとともに使用 |
--ft_max_word_len | FULLTEXT インデックスの単語の最大長 |
--ft_min_word_len | FULLTEXT インデックスの単語の最小長 |
--ft_stopword_file | 組み込みのリストではなくこのファイルからのストップワードを使用 |
--HELP | ヘルプメッセージを表示して終了 |
--help | ヘルプメッセージを表示して終了 |
--information | チェックされたテーブルの統計を出力 |
--key_buffer_size | MyISAM テーブルのインデックスブロックに使用するバッファーのサイズ |
--keys-used | どのインデックスを更新するかを示すビット値 |
--max-record-length | myisamchk が記憶するためのメモリーを確保できない場合、指定された長さを超える行をスキップ |
--medium-check | --extend-check 操作よりも速いチェックを実行 |
--myisam_block_size | MyISAM インデックスページに使用するブロックサイズ。 |
--myisam_sort_buffer_size | REPAIR 実行時のインデックスのソート、または CREATE INDEX か ALTER TABLE によるインデックスの作成の際に割り当てられるバッファー |
--no-defaults | オプションファイルを読み取らない |
--parallel-recover | -r および -n と同じテクニックを使用するが、異なるスレッドを使用してすべてのキーを並行して作成 (β) |
--print-defaults | デフォルトオプションの印刷 |
--quick | データファイルを変更しないことで、修復のスピードを向上 |
--read_buffer_size | 順次スキャンを実行する各スレッドは、スキャンする各テーブルについてこのサイズのバッファーを割り当て |
--read-only | テーブルを検査済みとマークしません |
--recover | 一意ではない一意なキー以外のすべてを修復できる修復を実行 |
--safe-recover | すべての行を順に読み取り、検出された行に基づいてすべてのインデックスツリーを更新する古いリカバリ方法を使用して修復 |
--set-auto-increment | 新しいレコードが指定された値で開始するように AUTO_INCREMENT ナンバリングを強制 |
--set-collation | テーブルインデックスのソートに使用する照合順序を指定 |
--silent | サイレントモード |
--sort_buffer_size | REPAIR 実行時のインデックスのソート、または CREATE INDEX か ALTER TABLE によるインデックスの作成の際に割り当てられるバッファー |
--sort-index | インデックスツリーブロックを高いものから低いものへの順にソート |
--sort_key_blocks | sort_key_blocks |
--sort-records | 特定のインデックスに基づいてレコードをソート |
--sort-recover | 一時ファイルのサイズが非常に大きくなっても、キーの解決にソートを使用することを myisamchk に強制 |
--stats_method | MyISAM インデックス統計コレクションコードでの NULL の取り扱い方法を指定 |
--tmpdir | 一時ファイルの格納に使用されるディレクトリ |
--unpack | myisampack でパックされたテーブルをアンパック |
--update-state | 情報を .MYI ファイルに保存し、いつテーブルがチェックされたか、およびテーブルがクラッシュしたかどうかをチェックします。 |
--verbose | 冗長モード |
--version | バージョン情報を表示して終了 |
--write_buffer_size | 書き込みバッファーサイズ |