エラー発生状況
実行環境
- MySQL 8.0
- PHP 7.3
- EC-CUBE 4.0.4
エラーログ
Whoops, looks like something went wrong.
(8/8) DriverException
An exception occurred in driver: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
エラーの原因
エラー内容を確認した限り、データベースの認証方法に問題があるようです。
これは MySQL が 5.7 から 8.0 にアップデートされるにあたって、ログイン認証方式が mysql_native_password から caching_sha2_password に変更されたためです。
MySQL 8.0 以降はデフォルトでログイン認証方式が caching_sha2_password になるようです。
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
エラーの解消方法
対象の MySQL ユーザーの認証方式を変更すれば OK です。
対応内容した内容は下記の通りです。詳細は後ほど解説します。
対応内容
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 155
Server version: 8.0.38 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| eccube |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| db_user | % | caching_sha2_password |
| root | % | 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)
mysql> ALTER USER 'db_user'@'%' IDENTIFIED WITH mysql_native_password BY 'db_password';
Query OK, 0 rows affected (0.01 sec)
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| db_user | % | mysql_native_password |
| root | % | 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)
mysql>
解説
ルート権限を持つ MySQL ユーザーでログインします。ウィザードにしたがってパスワードを入力してください。
mysql -u root -p
データベースを確認します。
show databases;
実行結果
+--------------------+
| Database |
+--------------------+
| eccube |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql テーブルを選択します。
use mysql;
user テーブルの設定情報を確認します。
select user, host, plugin from user;
実行結果
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| db_user | % | caching_sha2_password |
| root | % | 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)
今回変更対象の db_user は caching_sha2_password を認証方式に使用していることがわかります。
次のコマンドで認証方式を mysql_native_password に変更します。db_user、%、db_password の部分はそれぞれの環境に合わせて、ユーザー、ホスト、パスワードに変更してください。
ALTER USER 'db_user'@'%' IDENTIFIED WITH mysql_native_password BY 'db_password';
最後に認証方式が変更されているか確認します。
select user, host, plugin from user;
実行結果
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| db_user | % | mysql_native_password |
| root | % | 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)
mysql_native_password に変更されたのが確認できました。
これでエラーが修復できたはずです。お疲れ様でした。
コメント