ハマログ

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

古い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日


関連記事

第2回☆横浜の小学生向けプログラミング教室

昨年末、第2回目の小学生向けプログラミング教室を開催しました! 前回は夏休みに横…

AppEngineでphpMyAdminを動かす

データベースにMySQLを利用することが多いのですが、GCPで環境を作るときにG…

家をデザインするプログラム

昔、家を建てるするときに「家をデザインするプログラム」作ってみました。 なぜ作っ…


← 前の投稿

次の投稿 →