问题描述
在云服务器使用 docker安装的Mysql5.7数据库,刚开始的时候使用正常,后面突然有一天就连接不上了,报错为: ERROR 1045 (28000): Access denied for user 'root'@'1xxx'(using password:YES), 当登录MySQL数据库出现 Error 1045 错误时,表明输入的用户名或密码错误 被拒绝访问了
原因分析
mysql的服务器停止
用户的端口号或者IP导致
mysql的配置文件错误:my.ini等文件
root用户的密码错误
注意: MySQL服务搭建后, 默认root用户是不能进行远程访问连接的
具体解决办法
通过下面各个检查步骤,排除上面错误
(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;