1. 程式人生 > >MySQL修改密碼後無法進入問題ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)

MySQL修改密碼後無法進入問題ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)

MySQL之前無密碼,使用

UPDATE mysql.user SET authentication_string=’xxxx’ WHERE user=’root’ and host=’localhost’;

修改增加密碼後登入一直報錯, root以及密碼確定是正確,卻怎麼也無法從本地登入MySQL,提示
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES);

網上查詢原因:mysql庫中的user表缺少一個root指向host:localhost的資料項,只有一個root指向host:主機名的資料項,故怎麼也無法利用root賬戶登入MySQL。

但是按照方法關閉MySQL程序然後在啟動mysql的引數中加入 –skip-grant-tables來無密碼登入,MySQL卻無法啟動;去除該引數後服務正常啟動。而CMD控制檯跳轉到mysql的bin目錄下,再輸入mysqld –skip-grant-tables ,依然無效。此時密碼登入失敗,無密碼登入失效。

多方查詢後發現:

在MySQL 8.04前,執行:SET PASSWORD=PASSWORD(‘[新密碼]’);但是MySQL8.0.4開始,這樣預設是不行的。因為之前,MySQL的密碼認證外掛是“mysql_native_password”,而現在使用的是“caching_sha2_password”。

發現是由於版本原因導致:
在MySQL8版本下:
1. mysqld –console –skip-grant-tables –shared-memory 可以無密碼啟動服務
2. 然後另開視窗:mysql.exe -u root 登入
3. 進入mysql資料庫:(可以證明並非user和host不匹配問題)
這裡寫圖片描述
4. 將密碼置空:

UPDATE mysql.user SET authentication_string=” WHERE user=’root’ and host=’localhost’;

5.操作完成後退出重新登入(無需密碼);

MySQL8正確修改密碼語法:

進入資料庫:use mysql;
修改密碼:ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密碼’;
重新整理許可權: FLUSH PRIVILEGES;

一切迴歸正常使用!