環境
mysql 8.0.17
docker 19.03.1
状況
mysqlのバージョンが5.7の時は問題なくログインできたが、バージョンを8にしたら、
phpmyadminが急にログインできなくなった
dockerで環境構築を行なっています。
localhostでのphpはちゃんと表示されている。
mysqlのコンテナの中に入ってmysqlの接続はできる。しかし。phpファイルからmysql接続と
phpmyadminからの接続ができないという状況でした。
ググったら、バージョン8.0からセキュリティが厳しくなったらしい
https://qiita.com/RayDoe/items/baf53818ec8e44d4d148
バージョン8から認証プラグインが「caching_sha2_password」になったらしい。
色々ググったら認証方法を前のバージョンの時と同じにすればいいということはわかったが、
なぜかうまく行かなかった
解決策
まず、認証に関するテーブルの中身を見る
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
認証方法を変更(今回はパスワードをsecretにしました)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';
どうなったか確認してみた
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
これでうまくいった。