出现1819错误原因使因为,MySQL5.7为了加强安全性,为root用户随机生成了一个临时密码,解决方案如下
参考博客地址:https://www.cnblogs.com/ivictor/p/5142809.html
-
获得临时密码进入mysql
# grep 'temporary password' /var/log/mysqld.log 2019-08-18T00:27:59.187147Z 1 [Note] A temporary password is generated for root@localhost: la2<rej.j12Q
-
利用临时密码进入mysql
# mysql -uroot -p'la2<rej.j12Q'
-
此时需要修改密码,不然会提示Error1820
-
为了方便,如果想直接使用一个简单密码,会报1819错误
> set password = password('000000'); ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这个与validate_password_policy的值有关,validate_password_policy有以下取值:
Policy | Tests Performed |
---|---|
0 or LOW | Length |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file |
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
为了改成简单密码,可以做如下操作:
-
修改validate_password_policy参数的值(使判断基于密码长度)
> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)
-
修改validate_password_length,即密码最小的长度限制
> set global validate_password_length=5; Query OK, 0 rows affected (0.00 sec)
此处主要讲解决方法,不再叙述密码长度、特殊字符长度的相互影响,只需明确validate_password_length最小值为4即可,详情可看参考博客
-
修改密码
> set password = password('000000'); Query OK, 0 rows affected (0.00 sec)
-
此时修改成功,为了防止以后不小心改成简单密码,可以再把validate_password_policy改为默认的1或则2
ps:当然,这只是个人想法,随意即可> set global validate_password_policy=2; Query OK, 0 rows affected (0.00 sec)
-
此时便可使用新密码重新进入mysql
> exit; # mysql -uroot -p'000000';
ps:看到有些博客也有使用skip-grant-tables处理的,我没再尝试,大家感兴趣的可再试下这种方案