MySQL Incorrect definition of tableのエラーが発生したときにやったこと

MySQLでIncorrect definition of tableのエラーが発生したときにやったことをまとめました。

MySQL Incorrect definition of tableのエラーが発生したときにやったこと

ある日、気が付くとMySQLのエラーログがメッチャ幅を利かせることに気が付きました。開いてみると、6万行くらいの同じエラーが・・・。エラーの内容はこうです。

[ERROR] Incorrect definition of table mysql.column_stats: expected column 'max_value' at position 4 to have type varbinary(255), found type varchar(255).

[ERROR] Incorrect definition of table mysql.column_stats: expected column 'min_value' at position 3 to have type varbinary(255), found type varchar(255).

なんだ、これ。

Incorrect definition of table・・・、つまり、テーブル定義がおかしいぞって。

そういえば、XAMPPのバージョンをv3.2.4にアプデしたなー。それが原因か?などと思いつつ、エラー解消に向けてやったことを書いておきます。

ここでは MySQLでIncorrect definition of tableのエラーが発生したときにやったことのまとめ を紹介します。


エラーログを読み解く

エラーログによれば、mysqlスキーマのカラム名「max_value」と「min_value」の型が違うと。つまり、varchar(255)じゃなくて、varbinary(255)だろって言っています。

mysqlスキーマを見てみると、確かにvarchar(255)になっています。

mysqlスキーマではvarchar(255)になっている

なるほど。では、これをvarbinary(255)に方変更するか。

カラムの型を変更する

varchar(255)からvarbinary(255)へ型変更するには、下記のSQLを実行します。


alter table `column_stats` modify `min_value` varbinary(255);
alter table `column_stats` modify `max_value` varbinary(255);

テーブル構造をみると・・・、

varchar(255)からvarbinary(255)へ型変更された

よしよし、varchar(255)からvarbinary(255)へ型変更されたぞっと。

しばらく様子見ましたが、このエラーは出なくなりました。

別のエラーが発生した

今度は別のエラーが発生しました。

InnoDB: Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgrade

[Warning] InnoDB: Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgrade

どうやらMariaDBを更新した際に、警告ログが出力される場合があるようです。

これはmysql_upgradeを実行することで解決する可能性があります。

まとめ

MySQLでIncorrect definition of tableのエラーが発生したときにやったことのまとめを紹介しました。

気がつかないとエラーログが数GB単位に膨れ上がることもあります。ディスク圧迫の原因になるので、皆さんもチェックしてみてください。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。