mysqld
を
--skip-external-locking
で実行している場合(Linux
などのシステムではデフォルト)、mysqld
が使用している同じテーブルを
myisamchk
でチェックしても信頼できません。myisamchk
の実行中、mysqld
からテーブルにアクセスするユーザが確実にない場合のみ、mysqladmin
flush-tables
を実行してからテーブルをチェックします。テーブルにアクセスするユーザがいるかどうか確信できない場合には、テーブルをチェックする間、mysqld
を停止する必要があります。mysqld
がテーブルを更新しているときに
myisamchk
を実行すると、テーブルが破損していない場合でも破損の警告が出る可能性があります。
--skip-external-locking
を使用していなければ、いつでも
myisamchk
を使用してテーブルをチェックできます。この間、テーブルを更新しようとするクライアントはすべて、myisamchk
の準備が整うのを待ってから実行します。
myisamchk
を使用してテーブルを修復または最適化する場合、必ず、mysqld
サーバがそのテーブルを使用していないことを確認してください(--skip-external-locking
を使用している場合も同様です)。
mysqld
を停止しない場合は、少なくとも
mysqladmin flush-tables
を
myisamchk
の前に実行してください。 サーバと
myisamchk
が同時にテーブルにアクセスすると、テーブルが破損するおそれがあります。
この章では、MySQL データベースのデータ破損のチェック方法およびその対処方法について説明します。テーブルが頻繁に破損する場合は、原因を突き止める必要があります。 See 項A.4.1. 「MySQL が何度もクラッシュする場合に行うこと」。
MyISAM
テーブルのセクションで、テーブルが破損する原因を示しています。
See 項7.1.3. 「MyISAM
テーブルの問題」。
クラッシュをリカバリする際には、データベース内のテーブル
tbl_name
のそれぞれがデータベースディレクトリ内の次の
3
つのファイルに対応していることを理解しておく必要があります。
ファイル | 用途 |
tbl_name.frm |
テーブル定義ファイル |
tbl_name.MYD |
データファイル |
tbl_name.MYI |
インデックスファイル |
これら 3 つのファイルタイプはいずれもさまざまな形で破損する可能性がありますが、特にデータファイルとインデックスファイルに問題がよく発生します。
myisamchk
は、.MYD
(データ)ファイルのコピーをレコードごとに生成します。修復の最終段階で古い
.MYD
ファイルを削除し、新規ファイルをオリジナルの名前に変更します。--quick
を使用している場合、myisamchk
はテンポラリ .MYD
ファイルを生成しませんが、代わりに
.MYD
ファイルが正常であるとみなし、.MYD
ファイルに手を加えずに新規インデックスファイルだけを生成します。.MYD
ファイルに問題があった場合は
myisamchk
が自動的に検知して修復を中止するため、この方法も安全です。2
つの --quick
オプションを
myisamchk
に設定することもできます。この場合、myisamchk
はいくつかのエラー(重複キーなど)でも中止せず、.MYD
ファイルを修正して解決しようとします。通常の修復処理にディスクの空き容量では足りない場合にのみ、2
つの --quick
オプション指定が役立ちます。この場合、少なくとも
myisamchk
を実行する前にバックアップを作成しておいてください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.