ハマログ

株式会社イーツー・インフォの社員ブログ

古い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';
mysql

  at   2024年2月21日


関連記事

ちいさなしあわせ

こんにちは、のだです。   うちで適当に育てていたいちごの苗に実がなっ…

cronの編集

今更ながら昔習ったcronの編集方法です cronを作成・編集する際は cron…

IAMユーザー名を変更する(AWS CLI)

IAMユーザー名を変更しようと思いましたが、AWSマネジメントコンソールから変更…


← 前の投稿

次の投稿 →