ubuntu版本:18.04 mysql版本:5.7.24
ubuntu安裝mysql后用root賬戶登入會出現問題:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
可能是因為初始密碼為空;按空格回車后還是報一樣的錯
這樣就只能使用debian-sys-maint賬戶修改root賬戶密碼了。
debian-sys-maint賬戶是安裝mysql時系統自動生成的mysql用戶,debian和ubuntu系統都會這樣做,
停止或重啟服務都靠它,刪除它就無法重啟或者雷霆之服務。
如果你修改了它的密碼或覆蓋掉密碼,也會出現錯誤:
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
1 查看debian-sys-maint賬戶密碼:
debian-sys-maint賬戶是安裝mysql時系統自動生成的,密碼隨機生成。
終端輸入: sudo vim /etc/mysql/debian.cnf
password就是密碼,如果是復制密碼由后面使用,切忌不要將密碼字符串后面的空格也復制進去,否者后面粘貼密碼登入賬戶時會出現錯誤。
2 用剛才查看的密碼登入debian-sys-maint賬戶:
終端輸入指令:mysql -u debian-sys-maint -p ,然后輸入剛才查看的debian-sys-maint賬戶密碼。 注意-u可以和debian-sysy連在一起,-p不能。u表示用戶名,p表示密碼。
3 進入mysql后重新設置root賬號密碼:
sql指令:
use mysql (一定要寫上這條語句,很多網上的解決方案缺少這條語句,導致后一條語句出現no database selected錯誤,這是因為有選擇新創建的表所在的數據庫)
UPDATE user SET authentication_string=PASSWORD('你的密碼') where USER='root';
5.7之前的版本用:
update user set password=PASSWORD("你的密碼") where User = 'root';
指令的大小寫都行,注意語句后面分號。
退出mysql(sql指令:quit)並重啟mysql(終端指令:sudo service mysql restart)
這時候用root賬戶和修改后的密碼登入時(終端指令:mysql -uroot -p)會發現還是報錯!這時候其實密碼是修改成功的,但是plugin root 的字段是auth_socket,需要修改過來。
4 修改plugin root
查看plugin root
用debian-sys-maint賬戶和密碼登入mysql,然后輸入sql語句:
use mysql
select user,plugin from user;
修改plugin root
update user set authentication_string =password('你的密碼'),plugin='msyql_native_password' where user='root';
然后推出並重啟mysql,再用root賬戶登入就可以了。
總結:
1 這篇文章是遇到這個問題后查找網上資料整合而成的,網上關於這個問題的資料很多但是也有很多不足:比如指令不夠詳細,尤其是很多資料缺少使用mysql時需要use mysql這個指令的提示,這對小白用戶不太友好。再一個,大部分相關文章缺少修改plugin root的部分,所以我折騰了很多遍修改密碼但還是不成功。
2 很多時候問題的原因只是一個很小的錯誤,比如少一個分號,空格,復制密碼吧后面的換行符也復制進去了等,所以,盡量減少操作失誤。
3 遇到問題多分析反饋的錯誤原因
4 網上的資料很多,但終究是別人的,不一定能解決自己的問題(但可以提供解決問題思路),遇到問題多查找相關資料,找解決辦法,這個過程可能很花費時間很煩人,但是也能拓展不少知識,最后總結理解就能成為自己的東西。