MySQL ログイン エラー: エラー 1045 (28000): ユーザー 'root'@'localhost' ソリューションのアクセスが拒否されました

  1. 問題の説明

Docker によって クラウドサーバーに インストールされた Mysql5.7 データベースは、最初は正常に使用されていましたが、ある日から突然接続できなくなり、 エラー 1045 (28000):ユーザー 'root' のアクセスが拒否されましたというエラーが報告されました。 @'1xxx' (パスワードを使用: YES)、 MySQL データベースへのログイン時にエラー 1045 エラーが発生した場合、入力されたユーザー名またはパスワードが間違っており、 アクセスが拒否されたことを示します。
  1. 原因分析

  • mysqlサーバーが停止しました

  • ユーザーのポート番号または IP は、

  • Mysql 設定ファイルのエラー: my.ini およびその他のファイル

  • root ユーザーのパスワードが間違っています

注: MySQL サービスがセットアップされると、 デフォルトの root ユーザーはリモート アクセス接続を実行できなくなります。
  1. 具体的な解決策

以下の検査手順により上記のエラーを解消します。

(1).mysqlサービスが起動しているか確認する

mysqlサーバーが停止すると上記のエラーが報告されますが、ここではdockerを使用しているので、 docker ps コマンドでmysql関連のサービスが正常か確認してください。
#查看docker 相关服务
docker ps
...
#进入docker-mysql
docker exec -it docker_mysql bash
...
#进入mysql
 mysql -uroot -p
#然后输入密码
...
上記のコマンドにより、mysqlが起動しているかどうかを確認できます。

(2). mysqlパスワードを変更する

MySQL サービスのセットアップ後、 デフォルトの root ユーザーはリモート アクセス接続を実行できません。または、 root ユーザーのパスワードが間違っている場合も上記のエラーが報告されるため、mysql パスワードを変更して除外します。

1). 仮パスワードを確認する

初めてインストールした mysql のパスワードは変更されていません。次のコマンドを使用して、生成された一時パスワードを表示します。
grep "A temporary password is generated for root@localhost" /var/log/mysqld.log

2). ログイン

mysql -uroot -p
#然后输入临时密码,进入mysql端

3).パスワードを変更する

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
localhost は アドレスを表し、 root は データベースのパスワード を表します 。root は独自のパスワードに変更できます。

上記のコードを実行すると、エラーが発生する場合があります。

解決:

現在のパスワード ポリシーを表示する
show variables like '%validate_password_policy%';
show variables like '%validate_password_length%';
パスワードポリシーを変更する
長さと弱さを変更する
set global validate_password_policy=0; #设置为弱口令
set global validate_password_length=1; #密码最小长度为1

もう一度見直す

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

リフレッシュする

flush privileges;

やめる

quit;

再登録

mysql -uroot -p
show databases;

(3). リモートアクセスを有効にする

use mysql;                                           #访问mysql库
update user set host = '%' where user = 'root';     #使root能在任何的host访问
FLUSH PRIVILEGES;                                    #刷新
上記の更新を実行すると、エラーが報告される場合があります。
Duplicate entry ‘%-root’ for key ‘PRIMARY’
これは、 USER テーブルに複数の ROOT ユーザーが記録されている ためです。ユーザー フィールドが '%' または 'localhost' であるホストを除き、ユーザー フィールドが root であるユーザーを削除し、コマンド FLUSH PRIVILEGES を使用し 、リフレッシュしてください。問題は
select host from user where user = 'root' を使用し 、ホストにすでに %があるかどうかを確認してください。
次に、 FLUSH PRIVILEGES コマンドを使用して 更新すると、上記の問題が解決されます。データベースに再度接続して、成功したかどうかを確認します。

(4). mysqlの設定を変更する

1).方法1

my.cnf の [ mysqlId ] に設定を追加します
skip-grant-tables 
この設定によりリモートログインが実現できますが、権限をスキップして設定ファイルに直接記述すること は 推奨しません。

2).方法2

操作するには次のコマンドを使用します
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;

FLUSH PRIVILEGES;
通过mysql -uroot -p 命令,并输入密码进入数据库
mysql -uroot  -p
然后执行下面命令
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;
刷新并退出
FLUSH PRIVILEGES;
exit;

(5).总结

通过以上排除方法就可以解决 ERROR 1045 (28000)_ Access denied for user 'root'@'localhost'报错了
注意:
如果mysql是docker部署的,当每次重启容器时,可能需要再一次跑一下 步骤(4).修改mysql配置 这个命令,这个也有解决的办法:
#配置mysql密码还有默认的身份验证插件-解决每隔一段时间就会登陆不上问题
#身份插件-mysql_native_password 本地密码
default_authentication_plugin=mysql_native_password
#密码失效时间-永不过期
default_password_lifetime=0

其他解决办法:

docker exec -it 进入mysql,执行下面命令解决:
主要是 mysql_native_password 这个参数要注意
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
flush privileges; 
exit;

おすすめ

転載: blog.csdn.net/zhoupenghui168/article/details/131186655
おすすめ