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)になっています。
なるほど。では、これを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)へ型変更されたぞっと。
しばらく様子見ましたが、このエラーは出なくなりました。
別のエラーが発生した
今度は別のエラーが発生しました。
[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単位に膨れ上がることもあります。ディスク圧迫の原因になるので、皆さんもチェックしてみてください。
おつかれさまでした。