Memo

メモ > 技術 > データベース: 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;

Advertisement