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