各 MyISAM
.MYI
ファイルのヘッダには、テーブルが適切に閉じられているかをチェックするためのカウンタがあります。
CHECK TABLE
または
myisamchk
から次の警告が返されることがあります。
# clients is using or hasn't closed the table properly
これは、このカウンタがずれていることを意味します。テーブルの破損を意味しているわけではありませんが、少なくともテーブルを検査して問題がないことを確認する必要があります。
カウンタの仕組みは次のとおりです。
MySQL でテーブルが最初に更新されるときに、インデックスファイルのヘッダ内にあるカウンタが増加する。
その後の更新では、カウンタは変更されない。
FLUSH
によって、またはテーブルキャッシュに空きがないために、テーブルの最後のインスタンスが閉じられると、それまでにテーブルが一箇所でも更新されていればカウンタが減少する。
テーブルを修復するか、テーブルを検査して問題がなかった場合は、カウンタがゼロにリセットされる。
テーブルを検査する他のプロセスとの相互作用に伴う問題を回避するため、カウンタがゼロである場合は、テーブルを閉じる際にもカウンタが減少しない。
つまり、カウンタがずれる可能性があるのは、次の場合に限られます。
MyISAM
テーブルが
LOCK
および FLUSH
TABLES
を使わずにコピーされた。
更新されてから閉じられるまでの間に MySQL がクラッシュした(ただし、MySQL は各ステートメントで生じたすべての書き込みを次のステートメントまでに発行するため、テーブルが無事である可能性もある)。
mysqld
が使用していたテーブルで、第三者が
myisamchk --recover
または
myisamchk --update-state
を実行した。
ある mysqld
サーバが使用しているテーブルに対し、別の
mysqld
サーバが
REPAIR
または
CHECK
を実行した。この場合、CHECK
は実行しても問題ない(ただし他のサーバから警告を受ける)が、REPAIR
は避ける必要がある。現時点では、REPAIR
を実行するとデータファイルが新しいファイルで置換され、それが他のサーバに通知されないからである。
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.