- 論壇徽章:
- 0
|
MySQL密碼恢復(fù)筆記
//前言:在LINUX下裝了MYSQL,剛裝完的時候把ROOT空密碼改了,當(dāng)時也改了個好記的密碼,沒想到過了一個小時就忘記了,于是有了這篇恢復(fù)密碼過程筆記
因?yàn)镸ySQL密碼存儲于數(shù)據(jù)庫mysql中的user表中
所以只需要將我windows 2003下的MySQL中的user表拷貝過來覆蓋掉就行了
在c:\mysql\data\mysql\(linux 則一般在/var/lib/mysql/mysql/)目錄下有三個user表相關(guān)文件user.frm、user.MYD、user.MYI
user.frm //user表樣式文件
user.MYD //user表數(shù)據(jù)文件
user.MYI //user表索引文件
為保險(xiǎn)起見,三個都拷貝過來,不過其實(shí)如果之前在要恢復(fù)的那個MySQL上沒有更改過表結(jié)構(gòu)的話,只要拷貝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 mysql
mysql>update user set Password=PASSWORD('xxxxxx') where User='root';
這時候會出錯,提示user表只有讀權(quán)限
我分析了一下原因,只這樣的,因?yàn)閡ser.*文件的權(quán)限分配是windows 2003下的,在windows 2003下我ls -l一看權(quán)限是666
在linux下我一看,拷過來后權(quán)限變成了600(其實(shí)正常情況下600就行了,只不過這里的文件屬主不是mysql,拷過來后的屬主變?yōu)榱藃oot,所以會出現(xiàn)權(quán)限不夠,這時候如果你改成權(quán)限666則可以了,當(dāng)然這樣不好,沒有解決問題的實(shí)質(zhì)),在/var/lib/mysql/mysql/下ls -l看了一下
再
#chown -R mysql:mysql user.*
#chmod 600 user.*
//OK,DONE
重起一下MYSQL
重新連接
mysql>use mysql
mysql>update user set Password=PASSWORD('xxxxxx') where User='root';
mysql>FLUSH PRIVILEGES;
有一點(diǎn)值得注意:如果你windows 下mysql如果是默認(rèn)配置的話,注意要還要執(zhí)行
mysql>delete from user where User='';
mysql>delete from user where Host='%';
mysql>FLUSH PRIVILEGES;
好了,到這里恢復(fù)密碼過程就完成了
這個方法么就是有點(diǎn)局限性,你必須也具備另外的user表文件
其他還有幾種方法
其它方法一(這個是網(wǎng)上流傳較廣的方法,mysql中文參考手冊上的)
1. 向mysqld server 發(fā)送kill命令關(guān)掉mysqld server(不是 kill -9),存放進(jìn)程ID的文件通常在MYSQL的數(shù)據(jù)庫所在的目錄中。
killall -TERM mysqld
你必須是UNIX的root用戶或者是你所運(yùn)行的SERVER上的同等用戶,才能執(zhí)行這個操作。
2. 使用`--skip-grant-tables' 參數(shù)來啟動 mysqld。 (LINUX下/usr/bin/safe_mysqld --skip-grant-tables , windows下c:\mysql\bin\mysqld --skip-grant-tables)
3. 然后無密碼登錄到mysqld server ,
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
。你也可以這樣做:`mysqladmin -h hostname -u user password 'new password''。
4. 載入權(quán)限表: `mysqladmin -h hostname flush-privileges' ,或者使用 SQL 命令`FLUSH PRIVILEGES'。
5.killall -TERM mysqld
6.用新密碼登陸
其它方法二
直接用十六進(jìn)制編輯器編輯user.MYD文件
不過這個里面我要說明一點(diǎn),我這里編輯的時候發(fā)現(xiàn)個問題,加密的密碼串有些是連續(xù)存儲的,有些的最后兩位被切開了,后兩位存儲在后面其他地方.這一點(diǎn)我還沒想明白.還有注意一點(diǎn)就是編輯的是加密過的密碼串,也就是說你還是需要另外有user表文件。這種方法和我最上面介紹的方法的區(qū)別在于,這種方法直接編輯linux下的user表文件,就不需要重新改文件屬主和權(quán)限了
//后記,因?yàn)榛謴?fù)過程比較好玩,所以寫了篇筆記,不要砸我啊
//各位高手還有什么其他好玩的方法不要忘了告訴我哦:)
作者: r05e
來源: axe_united@hotmail.com
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/7486/showart_77167.html |
|