MySQL MariaDB で SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client エラーになる

MySQL

エラー発生状況

実行環境

  • 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 に変更されたのが確認できました。

これでエラーが修復できたはずです。お疲れ様でした。

コメント

タイトルとURLをコピーしました