PHP 7.0でMySQLバージョン8を実行しています。
PHPからデータベースに接続しようとすると、次のエラーが表示されます。
接続エラー:SQLSTATE [HY000] [2054]サーバーがクライアントに不明な認証方法を要求しました
PHPはこのエラーを表示する場合があります
警告:mysqli_connect():サーバーは10行目のD:\ xampp\htdocs\reg\server.phpでクライアント[caching_sha2_password]に不明な認証方法を要求しました
この問題を修正するにはどうすればよいですか?
@mohammed、これは通常、mysqlデータベースが使用している認証プラグインに起因します。
デフォルトおよび何らかの理由で、mysql 8のデフォルトプラグインはauth_socketです。ほとんどの場合、アプリケーションはpasswordを使用してデータベースにログインすることを期待します。
Mysqlのデフォルト認証プラグインをまだ変更していない場合は、次の方法で変更できます。
1。 mysqlにrootとしてログインします
2。次のSQLコマンドを実行します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';
「パスワード」をルートパスワードに置き換えます。アプリケーションがrootユーザーでデータベースにログインしない場合、上記のコマンドの「root」ユーザーをアプリケーションが使用するユーザーに置き換えます。
Digital Oceanは、これについてもう少し詳しく説明します Mysqlのインストール
MySQL設定を変更する必要があります。 my.cnfファイルを編集し、この設定をmysqldセクションに配置します。
[mysqld]
default_authentication_plugin= mysql_native_password
次に、次のコマンドを実行します。
FLUSH PRIVILEGES;
上記のコマンドは、デフォルトの認証メカニズムの変更を有効にします。
私は多くの方法を試してみましたが、これだけが私のために働きます
回避策 に感謝
**。envをチェックしてください
MYSQL_VERSION=latest
次に、このコマンドを入力します
$ docker-compose exec mysql bash
$ mysql -u root -p
(ルートとしてログイン)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
phpmyadminにアクセスして、次のようにログインします。
それが役立つことを願って
ここでの答えはどれも役に立たなかった。私がしなければならなかったことは:
その後、正常に動作します。
同じ問題に直面して、デフォルトの認証メカニズムがmysql_native_passwordではなくcache_sha2_passwordであるため、mysqlバージョン8でwordpress dockerコンテナーを実行できませんでした。
この問題を修正するには、デフォルトの認証メカニズムをmysql_native_passwordにリセットする必要があります。
Mysqlインストールでmy.cnfファイルを検索します。通常はLinuxマシンで、次の場所にあります-/ etc/mysql
My.cnfファイルを編集し、見出し[mysqld]のすぐ下に次の行を追加します
default_authentication_plugin = mysql_native_password
ファイルを保存し、rootユーザーを使用してmysqlコマンドラインにログインします
コマンドFLUSH PRIVILEGESを実行します。
私はLaravel Lumenを使用して小さなアプリケーションを構築しています。
私にとっては、.envファイルでDB_USERNAMEが定義されていなかったためです。
DB_USERNAME=root
これを設定することで問題が解決しました。
My.cnfファイルで、以下の2つのステップを確認します。
この値を確認してください-
old_passwords = 0;
0でなければなりません。
これもチェックしてください
[mysqld] default_authentication_plugin = mysql_native_password確認するもう1つの値は、
[mysqld]セクションは次のようになります。
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password
config.inc.phpファイルとして、Apacheサーバーを再起動すると動作しました。私はまだそれについて疑っていたので、Apacheとmysqlサーバーを停止し、それらを再び起動しましたが、現在は機能しています。