古いPHPからMySQLに接続できない場合がある
dockerでPHP/MySQLの開発環境をつくっていたら
ハマった。
mysqliで接続すりゃいいんでしょと思っていたら上手くいかない。
USER?PASSWORD?間違えたかな?間違ってない。
環境
PHP7.2.23
MySQL8.0
切り分け
エラーログを仕込んだところ以下のように出力された。
The server requested authentication method unknown to the client
原因
MySQL8.0は認証方式が「caching_sha2_password」となっているのだが、PHP7.2.4未満ではそれに対応できていないのが原因
対応
確認
mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | root | % | caching_sha2_password | | user | localhost | 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 | +------------------+-----------+-----------------------+
pluginのところが認証方式
変更
これをPHPの古いバージョンでも扱える「mysql_native_password」に変更する
例) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';