出现问题:
安装Mysql8.0后,第一次登录执行除修改密码的相关语句会出现如下错误(如图所示):
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
解决方法:
因此这里要求我们先修改密码,修改密码代码如下:(省时:直接修改密码为'12345aA@'就可以成功,然后就可以进行之后例如密码长度,密码验证策略的修改(0或LOW表示最低)等(滑到最下方),再重新设置密码。下面是讲解为什么要这么修改用的)
set password='你的密码';
但是事实上如果我们直接修改密码为 set password='123456',则会提示:
这表示我们的密码设置的不符合mysql8.0以上的密码设置规范策略。因此我们需要先知道mysql8.0以上所要遵守的密码策略。我们可以通过如下代码可以查看mysql8.0的密码策略。(意思是密码必须为8位,需要一个以上的小写字母和大写字母,需要一个以上的数字以及需要一个以上的特殊字符)
show variables like 'validate%';
但是事实上就跟上面说的如果不修改密码直接使用 show variables like 'validate%'; 该代码就会造成 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 这个问题。因此在修改之前我们可以先通过在终端输入
vim /etc/my.cnf
然后在【mysqld】下加入skip-grant-tables并保存
skip-grant-tables
之后重启mysql,代码为
service mysqld restart
重新登陆mysql,并通过以下代码查看mysql8.0以上的密码设置策略,并根据相关策略想好对应的相关密码。
show variables like 'validate%';
然后在终端重新输入 vim /etc/my.cnf,并将刚才在【mysqld】下加入skip-grant-tables删除(该语句可以让你不使用密码就可以进入数据库,如果不删除的话如果你要远程连接就会造成连接不上的问题),并重启数据库,并重新保存。
再次进入数据库完成对数据库密码的修改,然后再使用以下代码实现对密码策略的修改,之后再执行 set password='你的密码'; 语句就可以设置你自己想设置的密码了(例如:123456)。
--可以使用以下命令进行修改
--密码验证策略低要求(0或LOW代表低级)
set global validate_password.policy=MEDIUM;
--密码至少要包含的小写字母个数和大写字母个数
set global validate_password.mixed_case_count=1;
--密码至少要包含的数字个数。
set global validate_password.number_count=1;
--密码至少要包含的特殊字符数
set global validate_password.special_char_count=1;
-- 密码长度
set global validate_password.length=8;
这是我第一次写博客,哪里写的不好欢迎各位批评指正!
博客参考:【已解决】【Mysql8.0】ERROR 1820 (HY000): You must reset your password using ALTER USER statementMySQL8.0修改密码策略_mysql8修改密码策略_向往周全的博客-CSDN博客【已解决】【Mysql8.0】ERROR 1820 (HY000): You must reset your password using ALTER USER statement