問題背景
MySQL密碼連接不上,需要重置密碼
解決方案
由於修改密碼本身需要連接到數據庫,因此需要另一個系統賬號來登錄數據庫。
下面是相關步驟:
1. 首先執行以下命令
sudo cat /etc/mysql/debian.cnf
獲取到系統賬號的密碼(注意,禁止修改這個文件!!!)

2. 再輸入以下命令
mysql -u debian-sys-maint -p
密碼即剛才截圖中圈出的部分,不同機器密碼不同,要按照實際的填寫!
3. 此時進入mysql的命令行模式,分別輸入以下命令(本文以將密碼設置為root為例,第三條命令設置報錯請移到文章最後)
use mysql;
update user set plugin="mysql_native_password";
update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';
flush privileges;
exit;
4. 最後重啓mysql,再連接mysql,驗證是否修改成功
sudo service mysql restart
mysql -u root -p
若在上述第三步修改密碼時返回ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,則説明由於密碼不符合mysql密碼策略,需要臨時調整策略,或者使用符合策略的密碼,前者操作步驟如下:
1. 在mysql命令行模式下,執行以下代碼,查看mysql的當前密碼策略
SHOW VARIABLES LIKE 'validate_password%';

其中的參數説明:
validate_password_check_user_name:默認為OFF,設置為ON的時候表示不能將密碼設置成當前用户名或反向用户名,大小寫敏感(即以root賬號連接時不可設置密碼為root或toor,但是可以設置為Root,無論被設置的是哪個賬號)
validate_password_dictionary_file:默認為空,用於檢查密碼的字典文件的路徑名
validate_password_length:默認為8,密碼的最小長度,也就是説密碼長度必須大於或等於該值
validate_password_mixed_case_count:默認為1,如果密碼策略是中等或更強的,validate_password要求密碼具有的小寫和大寫字符的最小數量。對於給定的這個值密碼必須有那麼多小寫字符和那麼多大寫字符
validate_password_number_count:默認為1,密碼必須包含的數字個數
validate_password_policy:默認為MEDIUM,密碼強度檢驗等級,可以使用數值0、1、2或相應的符號值LOW、MEDIUM、STRONG來指定。(0/LOW:只檢查長度;1/MEDIUM:檢查長度、數字、大小寫、特殊字符;2/STRONG:檢查長度、數字、大小寫、特殊字符、字典文件)
validate_password_special_char_count:默認為1,密碼必須包含的特殊字符個數
注:validate_password_check_user_name和validate_password_policy的校驗是相互獨立的
2. 設置對應的策略值,如降低最小長度和校驗強度等級
set global validate_password_length=4;
set global validate_password_policy=LOW;
3. 再次執行之前失敗的更改密碼語句即可成功
4. 重啓mysql服務之後,修改的策略會自動還原為默認值