前言: 在LINUX下裝了MYSQL
剛裝完的時候把ROOT空密碼改了
當時也改了個好記的密碼
沒想到過了一個小時就忘記了
於是有了這篇恢復密碼過程筆記
因為MySQL密碼存儲於數據庫mysql中的user表中
所以只需要將我windows
下的MySQL中的user表拷貝過來覆蓋掉就行了
在c:\mysql\data\mysql\(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
下mysql密碼登陸了
mysql>use mysql
mysql>update user set Password=PASSWORD(
xxxxxx
) where User=
root
;
這時候會出錯
提示user表只有讀權限
我分析了一下原因
只這樣的
因為user
*文件的權限分配是windows
下的
在windows
下我ls
l一看權限是
在linux下我一看
拷過來後權限變成了
(其實正常情況下
就行了
只不過這裡的文件屬主不是mysql
拷過來後的屬主變為了root
所以會出現權限不夠
這時候如果你改成權限
則可以了
當然這樣不好
沒有解決問題的實質)
在/var/lib/mysql/mysql/下ls
l看了一下再
#chown
R mysql:mysql user
*
#chmod
user
*
//OK
DONE
重起一下MYSQL
重新連接
mysql>use mysql
mysql>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中文參考手冊上的)
向mysqld server 發送kill命令關掉mysqld server(不是 kill
)
存放進程ID的文件通常在MYSQL的數據庫所在的目錄中
killall
TERM mysqld
你必須是UNIX的root用戶或者是你所運行的SERVER上的同等用戶
才能執行這個操作
使用`
skip
grant
tables
參數來啟動 mysqld
(LINUX下/usr/bin/safe_mysqld
skip
grant
tables
windows下c:\mysql\bin\mysqld
skip
grant
tables)
然後無密碼登錄到mysqld server
>use mysql
>update user set password=password(
new_pass
) where user=
root
;
>flush privileges;
你也可以這樣做
`mysqladmin
h hostname
u user password
new password
載入權限表
`mysqladmin
h hostname flush
privileges
或者使用 SQL 命令`FLUSH PRIVILEGES
killall
TERM mysqld
用新密碼登陸
其它方法二 直接用十六進制編輯器編輯user
MYD文件
不過這個裡面我要說明一點
我這裡編輯的時候發現個問題
加密的密碼串有些是連續存儲的
有些的最後兩位被切開了
後兩位存儲在後面其他地方
這一點我還沒想明白
還有注意一點就是編輯的是加密過的密碼串
也就是說你還是需要另外有user表文件
這種方法和我最上面介紹的方法的區別在於
這種方法直接編輯linux下的user表文件
就不需要重新改文件屬主和權限了
From:http://tw.wingwit.com/Article/program/MySQL/201311/29487.html