程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 教你如何將MySQL數據庫的密碼恢復

教你如何將MySQL數據庫的密碼恢復

編輯:關於MYSQL數據庫

因為MySQL密碼存儲於數據庫mysql中的user表中,所以只需要將我Windows 2003下的MySQL中的user表拷貝過來覆蓋掉就行了。

在c:mysqldatamysql(Linux 則一般在/var/lib/mysql/MySQL/)目錄下有三個user表相關文件user.frm、user.MYD、user.MYI

user.frm //user表樣式文件

user.MYD //user表數據文件

user.MYI //user表索引文件

為保險起見,三個都拷貝過來,不過其實如果之前在要恢復的那個MySQL上沒有更改過表結構的話,只要拷貝user.MYD就行了

然後

#. /etc/rc.d/init.d/mysql stop#. /etc/rc.d/init.d/mysql start#MySQL -u root -p XXXXXX

好了,可以用Windows 2003下MySQL密碼登陸了

mysql>use mysqlMySQL>update user set Password=PASSWord('xxxxxx') where User='root';

這時候會出錯,提示user表只有讀權限

我分析了一下原因,只這樣的,因為user.*文件的權限分配是Windows 2003下的,在Windows 2003下我ls -l一看權限是666

在Linux下我一看,拷過來後權限變成了600(其實正常情況下600就行了,只不過這裡的文件屬主不是mysql,拷過來後的屬主變為了root,所以會出現權限不夠,這時候如果你改成權限666則可以了,當然這樣不好,沒有解決問題的實質),在/var/lib/mysql/MySQL/下ls -l看了一下

#chown -R mysql:MySQL user.*#chmod 600 user.*

//OK,DONE

重起一下MySQL

重新連接

mysql>use mysqlmysql>update user set Password=PASSWord('xxxxxx') where User='root';MySQL>FLUSH PRIVILEGES;

有一點值得注意:如果你Windows 下MySQL如果是默認配置的話,注意要還要執行

mysql>delete from user where User=''; mysql>delete from user where Host='%'; MySQL>FLUSH PRIVILEGES;

好了,到這裡恢復密碼過程就完成了

這個方法麼就是有點局限性,你必須也具備另外的user表文件

其他還有幾種方法

其它方法一(這個是網上流傳較廣的方法,MySQL中文參考手冊上的)

1. 向mysqld server 發送kill命令關掉mysqld server(不是 kill -9),存放進程ID的文件通常在MySQL的數據庫所在的目錄中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved