天天看點

mysql忘記root密碼的完美解決辦法

之前在用mac本的時候新裝的mysql無法直接進入,總是提示access denied for user root @localhost這個錯誤,原來是因為沒有給root登入權限。用不用密碼都有錯誤,下面就來說說解決辦法。

因為我用的是mac系統,是以跟Linux稍微有點差别,不過不大。首先必須要将mysql服務停掉,進入到mysql的bin目錄下,執行sudo ./mysqld_safe --skip-grant-tables; (注意:要用sudo,并且指令前要加./)這個指令也是啟動mysql的指令,但是安全模式,用戶端連接配接的時候是不需要密碼的。注意:如果在使用這個指令之前,mysql是啟動的狀态,則用戶端使用mysql指令連接配接的時候會報Can't connect to local MySQL server through socket'/tmp/mysql.sock' 異常。這個時候你就把mysql服務停掉,用mysqld_safe啟動就行了。啟動之後,用./mysql -uroot就可以直接進入到mysql指令行。不需要輸入密碼。進去之後,輸入以下指令grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;給root權限。注意:identified by 後面跟着的是mysql root的密碼,也就是說這個密碼一定要與mysql root的登入密碼一緻,否則還是登入不上去。但是這個時候會報錯:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,意思是說在安全模式下不能修改權限,這個時候需要執行以下語句:set global read_only=0; flush privileges;這樣再執行grant指令就可以了。之後就是修改root的密碼:

UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';      
這裡要注意,密碼的字段不是password,我用的是5.7的版本,應該是authentication_string,(這個字段名根據具體版本而定)PASSWORD是一個加密函數,括号裡面是密碼就行了,而且裡面的密碼要與上面的grant語句中的identified by後面的密碼一樣,否則root依然無法登入。這樣就OK了。最後執行一下flush privileges。之後重新開機一下mysql,這個時候啟動就正常啟動就可以了,再通過密碼登入mysql,成功!