無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

MYSQL8.0で作成したDBにCakePHPからアクセスできないときに確認しておくこと

ちょっと他の方のCakePHPコードを動かす機会が合ったんですが、微妙に詰まったので記録しておく。 DockerでサクッとMySQL8とCakePHP4系の環境を立ち上げたんですよ。でmigrateするじゃないですか。こうなるんですよ

2020-06-28 03:26:02 Error: [InvalidArgumentException] There was a problem connecting to the database: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client in /var/www/html/mycakeapp/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php on line 82

はい(´・ω・`)

認証できないってやつですね。もちろんUSER/PASSは同じであることを確認済み。
しかし、ついでに入れていたPHPMyAdmin側では認証が通る。とても不思議。MySQL側のコンテナに入ってログインしてみても通る。
ここまでで「これはPHP環境に問題があるのだろう」と特定して深堀り。

まず、php側のDocker環境に入り、iputils-pingを入れて疎通をみる。OK、疎通している。 次に、mariadb_clientを入れてつなぎに行こうとすると

ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

なるほど。caching_sha2_passwordが設定されているユーザーになっているのが原因っぽそう。


ちょっと調べてみたところ、MYSQL8.0からデフォルトの認証プラグインが、caching_sha2_passwordに変わっているんですが、PDO_MySQLを使う場合この認証方式を使えない模様。 https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors

で、接続しようとしていたユーザーはcaching_sha2_passwordを使う設定になっていたため、USER/PASS合っても弾かれる問題が起こっていたようです。 PHPMyAdmin側でユーザー設定変えてやれば、ちゃんと疎通できるようになりました。