MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

7.6.1 クラッシュリカバリへの myisamchk の使用

このセクションでは、MySQL データベースのデータの破損をチェックし、処理する方法について説明します。 テーブルが頻繁に破損する場合は、その理由を見つけるようにしてください。 セクションB.3.3.3「MySQL が繰り返しクラッシュする場合の対処方法」を参照してください。

MyISAM テーブルがどのように破損する可能性があるかについての説明は、セクション16.2.4「MyISAM テーブルの問題点」を参照してください。

外部ロックを無効にして mysqld を実行した (これはデフォルトです) 場合、mysqld が同じテーブルを使用中に、myisamchk を使用して、テーブルを確実にチェックすることはできません。 myisamchk の実行中に mysqld を使用してテーブルにアクセスできないことが確実な場合は、テーブルのチェックを開始する前に mysqladmin flush-tables を実行する必要があります。 これを保証できない場合は、テーブルのチェック中に、mysqld を停止する必要があります。 myisamchk を実行して、mysqld が同時に更新しているテーブルをチェックすると、テーブルが破損していなくても、破損しているという警告を受け取ることがあります。

外部ロックを有効にしてサーバーを実行する場合は、myisamchk を使用していつでもテーブルをチェックできます。 この場合、myisamchk が使用しているテーブルをサーバーが更新しようとすると、サーバーは myisamchk が終了するまで待機してから続行します。

myisamchk を使用して、テーブルを修復または最適化する場合は、mysqld サーバーがそのテーブルを使用していないことを常に確認する必要があります (これは外部ロックが無効にされている場合にも適用されます)。 mysqld を停止しない場合、myisamchk を実行する前に、少なくとも mysqladmin flush-tables を実行してください。 サーバーと myisamchk が同時にテーブルにアクセスすると、テーブルが破損する可能性があります

クラッシュリカバリを実行する場合、データベース内の各 MyISAM テーブル tbl_name が次の表に示すデータベースディレクトリ内の 3 つのファイルに対応することを理解しておくことが重要です。

ファイル 目的
tbl_name.MYD データファイル
tbl_name.MYI インデックスファイル

これらの 3 つのファイルの種類はそれぞれさまざまに破損することがありますが、ほとんどの場合に問題はデータファイルとインデックスファイルで発生します。

myisamchk は、.MYD データファイルのコピーを行ごとに作成することによって機能します。 これは、古い .MYD ファイルを削除し、新しいファイルを元のファイル名に変更して、修復ステージを終了します。 --quick を使用した場合、myisamchk は一時 .MYD ファイルを作成せず、代わりに .MYD ファイルが正しいとみなし、.MYD ファイルに手を加えずに新しいインデックスファイルだけを生成します。 myisamchk.MYD ファイルが破損しているかどうかを自動的に検出し、破損している場合は修復を中止するため、これは安全です。 myisamchk--quick オプションを 2 回指定することもできます。 この場合、myisamchk は一部のエラー (重複キーエラーなど) で中止せず、.MYD ファイルを修正して、それらを解決しようとします。 通常、2 つの --quick オプションの使用は、通常の修復を実行するためにディスクの空き容量が少なすぎる場合にのみ役立ちます。 その場合、少なくとも myisamchk を実行する前に、テーブルのバックアップを作成してください。