ハマログ

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

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


関連記事

CentOS Stream 8のdnfがError: GPG check FAILEDになったときの対応

CentOS Stream 8のOSが標準インストールされている状態でdnf u…

企業が公開するエンジニア向け研修資料を読んでみた

こんにちは。 koma です。 去年のうちにWindows 7のライセンスキーを…

風待月 2020

アフターコロナ初月、諸々解除されてきていますね。むろん解除されても、ウイルスが死…


← 前の投稿

次の投稿 →