MySQLでrootなのにgrantコマンドが実行できない場合の対処法

rootでログインしてユーザーを増やそうと思ったら

mysql> grant all on *.* to "myuser"@"192.168.0.0/255.255.255.0";
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

と怒られた。

調べてみたら色々対処法があるみたいだが、とりあえずエラーログを見てみると

120801 9:43:15 [ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it

言われた通りmysql_upgradeを実行すると

[root@localhost ~]# 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_priv OK
mysql.db OK
mysql.func OK
mysql.general_log OK
mysql.help_category
error : Table upgrade required. Please do "REPAIR TABLE `help_category`" or dump/reload to fix it!
mysql.help_keyword
error : Table upgrade required. Please do "REPAIR TABLE `help_keyword`" or dump/reload to fix it!
mysql.help_relation OK
mysql.help_topic
error : Table upgrade required. Please do "REPAIR TABLE `help_topic`" or dump/reload to fix it!
mysql.host OK
mysql.proc
error : Table upgrade required. Please do "REPAIR TABLE `proc`" or dump/reload to fix it!
mysql.procs_priv OK
mysql.servers OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name
error : Table upgrade required. Please do "REPAIR TABLE `time_zone_name`" or dump/reload to fix it!
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK

Repairing tables
mysql.help_category OK
mysql.help_keyword OK
mysql.help_topic OK
mysql.proc OK
mysql.time_zone_name OK
Running 'mysql_fix_privilege_tables'...
OK

それ以外にも幾つかテーブルが足りなかったようで、作ってくれた。

再度grantしてみる

mysql> grant all on *.* to "myuser"@"192.168.0.0/255.255.255.0";
Query OK, 0 rows affected (0.00 sec)

今度はOK

入れたrpmが足りなかったのか、mysql_install_dbがおかしかったのか管理テーブルが足りなかったのが原因のようだ。