ハマログ

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

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


関連記事

テスト設計技法 – 境界値分析

どうもーyasuです~ 本格的に夏ですねー カラッとした暑い日は好きです! 前回…

Laravelのパンくずリスト(Breadcrumb)の実装(リンクとJSON-LD)

Laravelのパンくずリストを実装します(ついでにJSON-LDも出力します)…

ロードバランサーを考慮したApacheのIP制限

ロードバランサー経由のIP制限 サイトのリダイレクト設定時、テスト用に自己IPの…


← 前の投稿

次の投稿 →