ハマログ

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

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


関連記事

iPhoneのバッテリー破損したときの記録

ある日こんな不具合が発生していました。 勝手に文字が打ちこんだり、妙な挙動をする…

新メンバーご挨拶

この2月よりシステム開発部としてe2infoに入社しました。 お酒と音楽と動物達…

濱うさぎ

昨日、いつも懇意にしていただいているお客様にご来社いただいた際に、おみやげをいた…


← 前の投稿

次の投稿 →