MySQL8.0.20无法登录:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password:YES)

我使用的MySQL版本为8.0.20,出现MySQL无法登录的情形为:

  • 修改密码策略规则,使用命令:
set global validate_password.policy=LOW
set global validate_password.length=6
set global validate_password.mixed_case_count=0
set global validate_password.special_char_count=0
set global validate_password.length=6
  • 刷新权限
flush privileges
  • 修改密码
 update user set authentication_string='123456' where user='root';

之后就出现我用123456的密码登录都提示下面的错误:
在这里插入图片描述
然而,实际上我的MySQL中root用户对应的host为%,已经不是localhost,出现这种报错的最根本原因都是密码输入错误的原因,然后按照网上千篇一律的解决方法进行解决:

  • 将etc/my.cnf配置文件中的skip-grant-tables注释打开,然后重启mysql,此时mysql为无密码即可登录状态
  • 无密码状态下进入mysql
  • 使用以下指令修改mysql中root密码
update user set authentication_string='123456' where user='root';
    • 刷新权限
flush privileges
  • 将etc/my.cnf配置文件中的skip-grant-tables注释掉,然后重启mysql
    按照网上几乎所有的方法,这样应该就成功了,可以正常登录了,但是:我的还是不行,按照这样的方法来来回回试了好多次,依然不行,登录时仍然会报相同的错误
    下面是正解,解决问题的方法来了:
  • 将etc/my.cnf配置文件中的skip-grant-tables注释打开,然后重启mysql,此时mysql为无密码即可登录状态
  • 无密码状态下进入mysql
  • 使用以下指令修改mysql中root密码
ALTER user 'root'@'l%' IDENTIFIED BY '123456';
  • 刷新权限
flush privileges
  • 将etc/my.cnf配置文件中的skip-grant-tables注释掉,然后重启mysql
    按照修改的新密码进入,大功告成!
    这个问题发生的原因在于update user set authentication_string=‘123456’ where user='root’这条指令已经不适用于MySQL8.0修改密码无效而出现问题,所以修改密码一定要用正确的指令!

你可能感兴趣的:(mysql)