ずっと前に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]
で目的のテーブルも作れて、ユーザーも作れるようになりました。
何でこうなったのか分かりませんが疲れたので備忘録