クラウド時代のWebアプリケーション・スマートフォンアプリを開発・運用する会社です。 03-4577-8680 03-6673-4950

MySQLサーバを5.5にバージョンアップしたらGRANT ALL PRIVILEGESできなくなった…という場合

2012-12-16

タイトルのような事態にみまわれたわけです。

具体的には、

#mysql -uroot -p
CREATE USER \’testuser\’@\’localhost\’ …;
GRANT ALL PRIVILEGES ON *.* TO \’testuser\’@\’localhost\’ …;

に対して

ERROR 1045 Access denied for user \’root\’@\’localhost\’…

と帰ってきます。
GRANTオプションをひとつづつ試してみると、SUPERだけが通らない模様。
権限が足りないらしいということはわかるもの、じゃあ何なのかというお話です。

今回、CentOS6のデフォルトレポジトリからMySQL5.1.xをインストール後、5.5.xへアップデートしているので、「5.5で権限まわり何か変わってるんじゃ?」と(それでもあれこれ調べ回ったあげくですが)気付いた次第。
ということで、mysql.userのカラム一覧を見てみると、案の定、5.1よりも権限カラムの数が増えております。
ここで該当する権限カラムをN→YにUPDATEしても良いわけですが、リファレンスにも「mysql_updateを使いたまえよ」と書かれているので、実行しておきましょう。
稼働環境だとdumpを取ったりなど細心の注意が必要ですが、いまはセットアップ中なのでやってしまいます。

# mysql_upgrade
Looking for \’mysql\’ as: mysql
Looking for \’mysqlcheck\’ as: mysqlcheck
Running \’mysqlcheck with default connection arguments
Running \’mysqlcheck with default connection arguments
mysql.columns_p riv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation O K
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.p lugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql. servers OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
m ysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_trans ition OK
mysql.time_zone_transition_type OK
mysql.user OK
Running \’mysql_ fix_privilege_tables\’…
OK

この後MySQLサーバ再起動(権限リフレッシュだけでも問題ないはずですが)によって、GRANT ALL PRIVILEGESが通るようになりました。