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;
如果能登录了,那你的密码应该是经过加密了。