MySQL登录报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

项目场景:

Mysql8.0登录报错


原因分析:

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)

MySQL8.0 不能通过直接修改 mysql.user 表来更改密码。
因为authentication_string字段下只能是MySQL加密后的43位字符串密码,其他的导致错误。错误不报出,但是无法再登录mysql,总是会提示无法认证

可以用以下命令查看authentication_string字段下的密码是否是加密后的密码

// 使用mysql库
use mysql;
// 查看用户的authentication_string字段下的密码是否加密
select user,authentication_string from user;

如果你的密码下面图片这种,可以试试能不能登录,我的mysql8.0是不能登录的
在这里插入图片描述

因此,正确更改密码的方式:先清空root密码,再改密码


解决方案:

按照以下步骤走

找出mysql的配置文件
find / -name my.cnf

编辑修改mysql配置文件
vi /etc/my.cnf

在配置文件里[mysqld]后添加以下两行代码(设置mysql无密码登录和添加加密方式)
skip-grant-tables
#下面的是添加加密方式
default-authentication-plugin=mysql_native_password

保存退出重启mysql
systemctl restart mysqld.service

登录mysql(无密码登录)
mysql -uroot -p
输入密码时直接回车进入,无需密码

进入mysql库
use mysql;

刷新权限
mysql> flush privileges;

清空密码
mysql> UPDATE user SET authentication_string="" WHERE user=“root”;

刷新权限
mysql> flush privileges;

设置root的新的密码
mysql>alter user’root’@’%’ IDENTIFIED BY 'test123 ';

刷新权限
mysql> flush privileges;

退出mysql
quit

删除my.cnf的skip-grant-tables后重启mysql
systemctl restart mysqld.service

登录mysql
mysql -uroot -ptest123

然后再看看用户的authentication_string字段下的密码是否加密
select user,authentication_string from user;
如果能登录了,那你的密码应该是经过加密了。