MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  myisamchk — MyISAM テーブルメンテナンスユーティリティー

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

myisamchk ユーティリティーは、データベーステーブルに関する情報を取得したり、データベーステーブルのチェック、修復、または最適化を実行したりします。myisamchkMyISAM テーブル (データおよびインデックスの保存のための .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 ...

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 --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 書き込みバッファーサイズ


関連キーワード:  テーブル, myisamchk, チェック, プログラム, インデックス, 実行, サーバー, 修復, 情報, データベース