MySQL登录时报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘解决办法

  1. 问题描述

在云服务器使用 docker安装的Mysql5.7数据库,刚开始的时候使用正常,后面突然有一天就连接不上了,报错为: ERROR 1045 (28000): Access denied for user 'root'@'1xxx'(using password:YES), 当登录MySQL数据库出现 Error 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;                                    #刷新
在执行上面update时,也许会报错:
Duplicate entry ‘%-root’ for key ‘PRIMARY’
这是因为 有多个ROOT用户纪录在USER表中了, 最好是把除了host为’%'或者为’localhost’的其他user字段为root的用户删除掉,然后利用命令 FLUSH PRIVILEGES 刷新即可解决该问题
使用 select host from user where user = 'root';查看一下host是否已经有了 %这个值
然后 利用命令 FLUSH PRIVILEGES 刷新,这样就解决了上面的问题,再次连接数据库,看看是否成功

(4).修改mysql配置

1).方法一

在my.cnf的[ mysqlId]里面加配置
skip-grant-tables 
这个配置是可以实现远程登陆,但是跳过权限直接写在配置文件里的这种做法 不建议使用

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