MySQL 5.0 => 5.1, 5.1 => 5.1アップグレード時のmysql_upgrade実行時、不正な「note : The storage engine for the table doesn't support repair」と「Please do "REPAIR TABLE `テーブル名`" or dump/reload to fix it!」が表示される
MySQL 5.0.xから5.1.x、もしくは5.1.xから5.1.x'に/var/lib/mysqlをコピーしたり、或いはすでにデータが構築されているサーバのrpm等によるアップグレードする場合にinnodbがstorage engineとなっていると不適切なメッセージが表示されてしまうようです。
本家の類似バグ(英語)
http://bugs.mysql.com/bug.php?id=42563
本質的には下記の記述です
In case of incompatible changes between old and new table
versions, the mysqlcheck program prints error messages like
this:
error: Table upgrade required. Please do
"REPAIR TABLE `table_name`" to fix it!
However, InnoDB doesn't support REPAIR TABLE query, so the
message is confusing.意訳:
古い形式と新しい形式のテーブルでコンパチブルでない変更が発生した場合、mysqlcheckは下記のようなエラーメッセージを表示する
しかし、InnoDBはRAPIR TABLEクエリをサポートしないため、このメッセージは混乱する
まず、5.0.xから5.1.xにアップグレードするとmysqld.logに下記のようなメッセージが表示されmysql権限テーブルの更新が必要となります。
mysqld.log
Please use mysql_upgrade to fix this error.
セオリー通りに、mysql_upgradeをすると、一度CHECK TABLEがひととおり実行されるのですが、この場合、なぜかREPAIR TABLEが実行できない仕様のinnodb storage engineを用いたテーブルについても、
mysql_upgradeの出力
Please do "REPAIR TABLE `テーブル名`" or dump/reload to fix it!
と警告され、mysql_upgradeではその後REPAIRを試みるようで
mysql_upgradeの出力続き
note : The storage engine for the table doesn't support repair
となってしまいます。
CHECK TABLEのバグかとは思うのですが、テーブルをreloadするか、Analyze / Optimizeを実行するか(ただしこれで治ったのかどうかの確証は得られないですが!)、mysqldumpから作成する必要があるようです。MySQL5.0系から5.1への移行が今後サポート等考慮するとふえてくることが想定されますが、データ容量が多いinnodb storage engineのアップグレード時は気をつけたほうがいいですね。
上記のバグ番号の続編・追加情報は下記。(英語)
http://bugs.mysql.com/bug.php?id=47205