MySQLリストアした後にログインできない
症状
- リストアしたDBに、一部のユーザでMySQLにログインできない
原因
- mysql.userテーブルを直接更新した場合、権限設定が自動で再ロードされないため。
対応方法
- mysqldをrestartするか、
mysql> FLUSH PRIVILEGES;
すればOK。
経緯
移行元
# 移行元からダンプファイル取得 # mysqlのシステムDBも含める mysqldump -u$user -p$pw --opt --all-database > dump.sql
移行先
# 移行先にダンプファイルをリストア # mysqlシステムDBもまとめて上書き mysql -u$user -p$pw -h localhost < dump.sql # 移行元にあったMySQLユーザでログインをためす # でもログインできない mysql -u app_user -h localhost -p Enter password: ERROR 1130 (HY000): Host 'xx.xx.xx..xx' is not allowed to connect to this MySQL server # rootではログインできた mysql -u root -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. # user情報を確認するが、移行元の情報と全く同じ mysql> SELECT * FROM mysql.user WHERE User = 'app_user'; # 権限を確認するが、なぜか外れている mysql> SHOW GRANTS FOR 'app_user'@'localhost'\G ERROR 1141 (42000): There is no such grant defined for user 'ap_user' on host 'localhost' # 権限反映 # https://dba.stackexchange.com/questions/32967/cant-show-grants-after-mysql-re-install mysql> FLUSH PRIVILEGES; # 権限が取得できるようになった mysql> SHOW GRANTS FOR 'app_user'@'localhost'\G *************************** 1. row *************************** Grants for app_user@localhost: GRANT ALL PRIVILEGES ON *.* TO app_user@localhost IDENTIFIED BY PASSWORD 'xxxxxx' 1 row in set (0.00 sec) mysql> quit # ログインできた mysql -u app_user -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g.