出現1819錯誤原因使因爲,MySQL5.7爲了加強安全性,爲root用戶隨機生成了一個臨時密碼,解決方案如下
-
獲得臨時密碼進入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處理的,我沒再嘗試,大家感興趣的可再試下這種方案