【轉】MySQLroot用戶忘記密碼解決方案(安全模式,修改密碼的三種方式)


文章出自:http://www.2cto.com/database/201412/358128.html

1.關閉正在運行的MySQL
2.啟動MySQL的安全模式,命令如下:

?
1
mysqld --skip-grant-tables

or

?
1
mysqld-nd --skip-grant-tables

3.使用root用戶[免密碼]登陸MySQL

?
1
mysql -u root -p


輸入密碼時,直接回車
4.選擇MySQL系統庫

?
1
use mysql



5.查看當前系統用戶root的密碼

?
1
select user ,host, password from user where user = "root"


查看的password是經過加密的,若以后想要恢復當前密碼可以先運行這條命令備份一下當前的密碼
6.修改root用戶的密碼

?
1
update user set password = PASSWORD ( "your_password" ) where user = "root"


這里是直接修改了root用戶在所有登陸位置的密碼,若你僅僅只想修改root在某一處的密碼,可以在上一條命令中增加一個限定條件host='somewhere'
比如,下面的命令修改了root用戶在本機localhost的登陸密碼

?
1
update user set password = PASSWORD ( "your_password" ) where user = "root" and host= "localhost"


上面的操作是直接對MySQL系統庫mysql進行修改,安全性較低,一旦出現誤操作,成本高,難恢復,並且僅限於對mysql庫有UPDATE權限的用戶,MySQL本身為我們提供了一種更加簡便的操作方式,在此作一下簡單的介紹
修改當前登陸用戶的密碼,使用SELECT CURRENT_USER();可查看當前登陸用戶

?
1
SET PASSWORD = PASSWORD ( 'cleartext password' );

修改bob用戶在%.example.org位置上的登陸密碼,注意這里的host地址%.example.org是必須要存在的

?
1
SET PASSWORD FOR 'bob' @ '%.example.org' = PASSWORD ( 'cleartext password' );


當然我們也可以通過GRANT的方式修改密碼

?
1
GRANT USAGE ON *.* TO 'bob' @ '%.example.org' IDENTIFIED BY 'cleartext password' ;


關於修改密碼的詳細內容還是請見官方文檔(5.6)
http://dev.mysql.com/doc/refman/5.6/en/set-password.html
7.刷新一下系統的權限

?
1
flush privileges ;


8.關閉MySQL的安全模式,重新啟動即可

注:

在第2步,啟動安全模式的時候,命令行可能會一直處於掛起狀態,此時Ctrl+c也不能終止運行,這時候只要通過netstat -ao查看MySQL端口是否處於監聽狀態,如是即代表MySQL已經進入了安全模式,出現這種現象是主要因為MySQL不提倡安全模式長時間運行

 

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。前兩天也出現過這個問題,網上找了一個比較流行的方法(見方法一),搞定了。今天又用這個試了試,卻搞不定,在網上找了半天,終於發現是因為mysql數據庫的user表里,存在用戶名為空的賬戶即匿名賬戶,導致登錄的時候是雖然用的是root,但實際是匿名登錄的,通過錯誤提示里的''@'localhost'可以看出來,於是解決辦法見方法二。

方法一:
1.關閉mysql
   # service mysqld stop
2.屏蔽權限
   # mysqld_safe --skip-grant-table
   屏幕出現: Starting demo from .....
3.新開起一個終端輸入
   # mysql -u root mysql
   mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
   mysql> FLUSH PRIVILEGES;//記得要這句話,否則如果關閉先前的終端,又會出現原來的錯誤
   mysql> \q

方法二:
1.關閉mysql
   # service mysqld stop
2.屏蔽權限
   # mysqld_safe --skip-grant-table
   屏幕出現: Starting demo from .....
3.新開起一個終端輸入
   # mysql -u root mysql
   mysql> delete from user where USER='';
   mysql> FLUSH PRIVILEGES;//記得要這句話,否則如果關閉先前的終端,又會出現原來的錯誤
   mysql> \q


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM