MySQLでroot権限なのにGRANT構文エラーが出た場合に解決できる1つのコマンド
mysql> GRANT ALL ON *.* TO ...
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
えええええ!?なぜ?こないだまで問題なく通ったのに・・・
そんな思いでここにたどり着いた方に朗報です。
そうでない方はごめんなさい。
rootなど、適切な権限があるにも関わらずGRANT文でエラーが出てしまった場合、MySQLのバージョンアップ等により、テーブル構成が古いままではユーザ作成が出来ない、という状況に恐らくなってしまってます。
以下のコマンドでテーブル構成をアップデートしてみましょう。
[rootの部分は適宜ご変更ください]
mysql_upgrade -u root -p
mysql_upgrade -u root -p
※ MySQLに入っている場合は一度出てください
※ /var/lib/mysql/mysql_upgrade_info というファイルを作るので、root権限など、ファイル書き込み権限のあるユーザーで実行することを推奨します。
書き込み権限のないユーザーで実行すると、以下のようなエラーが出ます。
"Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13"
パスワードの入力を終えると、以下のようにテーブル構成がアップデートされます。
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.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin 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
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
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.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin 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
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
とりあえず試す価値はあると思いますので、ぜひともお試しください。