MySQLを5.6に上げたらいろいろおかしくなった件


ずっと前にMySQLを5.6にバージョンアップしました。

問題なく使えていたのですが、ユーザー追加をするとエラーを出してユーザー追加が出来ません

ググってみるとmysql_upgradeの実行で解決するようなので実行してみましたが、

Running ‘mysql_fix_privilege_tables’…

ERROR 1426 (42000) at line 47: Too big precision 14 specified for column ‘Timestamp’. Maximum is 6.

ERROR 1426 (42000) at line 49: Too big precision 14 specified for column ‘Timestamp’. Maximum is 6.

な感じでエラーで止まります

timestampの定義の長さが長いと言うことなんでしょうが、これが何処で呼ばれているか分からずまたググります

公式サイトにあるようにmysql_fix_privilege_tablesを単独で実行してみると、やはりタイムスタンプのエラーが出ます

mysql_fix_privilege_tablesを叩くとこれが実行しているSQLファイル(mysql_fix_privilege_tables.sql)のパスがあるので調べてみるとtimestamp(14)の記述があります!!

それをすべてtimestampに変えて再度実行するとエラーはでませんでしたが、ユーザー追加で失敗します。

エラーログを見ると

[ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it

と言ってくるので、proxies_privのテーブルがmysqlデータベースにないのが原因用のですが、先ほどのSQLファイルにはそのテーブルを作るcreate文がないのでどうやら何かが違うようです。

バグなのかなんなのか分かりませんが、MySQLはソースからインストールしたのでソースコード漁ってみると

scripts/mysql_fix_privilege_tables.sql

を発見。その中を除くとproxies_privテーブルのcreate文があるのでそれを先ほどのsqlファイルと差し替え(オリジナルはリネームバックアップ)

timestamp(14)の記述もあるので直して再度


mysql_fix_privilege_tables --password=[yourpassword]

で目的のテーブルも作れて、ユーザーも作れるようになりました。

何でこうなったのか分かりませんが疲れたので備忘録

yagi