我使用的MySQL版本为8.0.20,出现MySQL无法登录的情形为:
- 修改密码策略规则,使用命令:
set global validate_password.policy=LOWset global validate_password.length=6set global validate_password.mixed_case_count=0set global validate_password.special_char_count=0set 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修改密码无效而出现问题,所以修改密码一定要用正确的指令!