MySQL 5.6から5.7にアップグレードしてデータベースユーザがmysqlにログインできなくなった場合の対処法メモ。
不具合内容
MySQL 5.6から5.7にアップグレードし、次のようにデータベース内容のアップグレードを実行後、データベースユーザがmysqlにログインできなくなった。
> sudo mysql_upgrade
rootでログインしてユーザのパスワードを変更しようとするとエラーが出て変更できない。
> mysql -u root -p Enter password: ...(略)... mysql> set password for 'dbuser'@'localhost' = password('newpassword'); ERROR 1524 (HY000): Plugin '*0D4FDCB1DADF84AEBCD41039C4B96A6CE0BAAE2F' is not loaded mysql>
mysql.userテーブルのpluginフィールドを表示すると、おかしな値が入っている。
mysql> select user,host,plugin from mysql.user; +-----------+-----------------+-------------------------------------------+ | user | host | plugin | +-----------+-----------------+-------------------------------------------+ | root | localhost | mysql_native_password | | root | hostname.net | mysql_native_password | | root | 127.0.0.1 | mysql_native_password | | root | ::1 | mysql_native_password | | dbuser | localhost | *0D4FDCB1DADF84AEBCD41039C4B96A6CE0BAAE2F | | mysql.sys | localhost | mysql_native_password | +-----------+-----------------+-------------------------------------------+ 6 rows in set (0.00 sec) mysql>
自分にとっては不具合だけど、たぶんMySQLの仕様。かな?
対処法
mysqlにrootでログインし、pluginを変更してパスワード再設定する。
- mysqlにrootでログイン。
> mysql -u root -p Enter password: ...(略)... mysql>
- mysql.userのpluginフィールドを ‘mysql_native_password’ に変更。
mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update mysql.user set plugin='mysql_native_password' where user='yuka'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql>
- パスワードを再設定。
mysql> set password for 'dbuser'@'localhost' = password('新しいパスワード'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> quit Bye >
- mysqlにログインできることを確認。
> mysql -u dbuser -p Enter password: mysql>