mabots' blog

知のレバレッジを最大化せよ (旧はてなダイアリーから移転しました。)

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