Error:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

WordPressのインストールをしようとしたら、Error:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the clientというエラーが出たので対処法となります。

データベース関連

データベースの情報は以下の通りです

  • ミドルウェア:MySQL
  • バージョン:8.0

ユーザー情報

  • ユーザー名:logw
  • パスワード:nyi9rGK3)*%K&?
  • ホスト名1:locahost
  • ホスト名2:127.0.0.1
  • ポート番号:3306

ホスト名は1でも2でもどちらでも問題ありません。

症状

SSHからの接続はできますが、PHPからの接続ができなくエラーとなります。 [c]

mysql -u logw -p

Enter password:上記のパスワードをいれる Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 203 Server version: 8.0.18 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. [/c] 問題無く接続できました。

phpから接続

<html>
<head><title>PHP TEST</title></head>
<body>
<?php
$dsn = 'mysql:dbname=logw;host=127.0.0.1';
$user = 'logw';
$password = 'nyi9rGK3)*%K&?';
try{
$dbh = new PDO($dsn, $user, $password);
print('
');
if ($dbh == null){
print('接続に失敗しました。
');
}else{
print('接続に成功しました。
');
}
}catch (PDOException $e){
print('Error:'.$e->getMessage());
die();
}
$dbh = null;
?>
</body>
</html>

エラー文:Error:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client となります。phpのバージョンは7.3となります。

原因

MySQL8では、デフォルトの認証方式がcaching_sha2_passwordとなっていますが、PHPのライブラリが対応していないことでエラーとなります。PHPの認証方式はmysql_native_passwordのため、これに戻す事で解決します。

設定確認

まずはSSHで設定を確認します。 [c]

mysql -u root -p

Enter password:rootのパスワードをいれる Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 203 Server version: 8.0.18 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. #認証方式を確認する mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | logw | localhost | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | +------------------+-----------+-----------------------+ #認証方式がcaching_sha2_passwordとなっています。 [/c] 認証方式が違うので、PHPだとエラーとなります。今回は既存ユーザーとなるので、既存ユーザーの修正コマンドをいれます。

既存ユーザー修正

[c] mysql> ALTER USER 'logw'@'localhost' IDENTIFIED WITH mysql_native_password BY 'nyi9rGK3)*%K&?'; Query OK, 0 rows affected (0.01 sec) [/c] これで設定完了です。 ※パスワードは自身の使っているパスワードに置き換えて下さい 中身を確認します [c] mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | logw | localhost | mysql_native_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | +------------------+-----------+-----------------------+ [/c] 無事に変更されました。これで接続できます