メモ > 技術 > データベース: MySQL > MySQL8へのバージョンアップ
MySQL8へのバージョンアップ
MySQL 8.0 への移行が完了しました 〜さようなら全ての MySQL 5.7〜 - Cybozu Inside Out | サイボウズエンジニアのブログ
https://blog.cybozu.io/entry/2021/05/24/175000
■データベースに接続できない場合
PHPからMySQL8を使用する際、「The server requested authentication method unknown to the client」というエラーになって接続できないことがある。
以下はChatGPTによる解説。
ご認識のとおり、エラーの原因は plugin が caching_sha2_password になっているためです。
MySQL 8.0 では、新しい認証方式 caching_sha2_password がデフォルトになりましたが、PHP7 の mysqli や PDO_MySQL 拡張モジュールがこれに未対応な場合があります。
そのため、PHP7 から接続するには、mysql_native_password に変更する必要があります。
■解決方法:ユーザーの認証プラグインを mysql_native_password に変更する
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'パスワード';
FLUSH PRIVILEGES;
user と パスワード の部分は、実際に使っているユーザー名・パスワードに読み替えてください。
これをもとに、以下のように確認する。
> USE mysql;
> SELECT user, host, plugin FROM user;
+----------------------------+-----------+-----------------------+
| user | host | plugin |
+----------------------------+-----------+-----------------------+
| root | % | caching_sha2_password |
| user | % | 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 |
+----------------------------+-----------+-----------------------+
6 rows in set (0.00 sec)
上記のようにpluginが「caching_sha2_password」となっている場合、PHPから接続したいユーザで「mysql_native_password」に変更する。
具体的には、以下のように実行する。
> USE mysql;
> SELECT user, host, plugin FROM user;
> ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'userpass';
> FLUSH PRIVILEGES;
> SELECT user, host, plugin FROM user;