このセクションでは、MySQL データベースのデータ破損に対するチェックと対処方法について説明します。テーブルが頻繁に破損する場合は、項B.1.4.2. 「What to Do If MySQL Keeps Crashing」 を参照するなどして、その原因究明を行い必要があります。
MyISAM
テーブルが破損する原因に関する説明は、項13.4.4. 「MyISAM
テーブルの問題点」
を参照してください。
外部ロックを無効にして mysqld を実行する場合 (MySQL 4.0 以降のデフォルト)、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 ファイルは次の通りです。
ファイル | 用途 |
|
テーブル定義ファイル |
|
データ ファイル |
|
インデックス ファイル |
この 3 ファイルは、様々な形で破損の原因に関係していますが、最も問題が発生するのは、データ ファイルとインデックス ファイルです。
myisamchk は、..MYD
(データ)ファイルのコピーをレコードごとに生成します。修復の最終段階で古い
.MYD
ファイルを削除して、新規ファイルをオリジナルの名前に変更します。--quick
を使用している場合、myisamchk
ではテンポラリの .MYD
ファイルを生成しません。その代わりに
.MYD
ファイルが正常であるとみなし、.MYD
ファイルに手を加えずに新規インデックス
ファイルだけを生成します。.MYD
ファイルに問題があった場合は
myisamchk
が自動的に検知して修復を中止するため、この方法は安全です。2
つの --quick
オプションを
myisamchk
に設定することもできます。この場合、myisamchk
はいくつかのエラー(重複キーなど)でも中止しませんが、.MYD
ファイルを修正して解決しようとします。通常、修復処理にディスクの空き容量では足りない場合にのみ、2
つの --quick
オプション指定を利用します。その場合、少なくとも
myisamchk
を実行する前にバックアップを作成してください。