誰都不想弄丟家門鑰匙,但不管多么小心,時間長了,這樣的事情總會發生幾次。MySQL密碼也是一樣,把它寫在文檔上不太安全,記在腦子里又難免會忘記。
如果你忘記了MySQL密碼,如何重置它呢?
下面是錯誤答案:
首先停止MySQL服務,然后使用skip-grant-tables參數啟動它:
shell> /etc/init.d/mysql stop
shell> mysqld_safe --skip-grant-tables &
此時無需授權就可以進入到MySQL命令行,使用SQL重置MySQL密碼:
UPDATE mysql.user SET Password=PASSWORD('...') WHERE User='...' AND Host= '...';
FLUSH PRIVILEGES;
為什么說它是錯誤答案?因為在單純使用skip-grant-tables參數啟動服務后,除非數據庫服務器屏蔽了外網訪問,否則除了自己,其它別有用心的人也可能訪問數據庫,盡管重置密碼所需的時間很短,但俗話說不怕賊偷就怕賊惦記著,任何紕漏都可能釀成大禍。
下面是正確答案:
關鍵點是:在使用skip-grant-tables參數的同時,還要加上skip-networking參數:
shell> mysqld_safe --skip-grant-tables --skip-networking &
接著使用SQL重置密碼后,記得去掉skip-networking,以正常方式重啟MySQL服務:
shell> /etc/init.d/mysqld restart
上面的方法需要重啟兩次服務,實際上還能更優雅一點,重啟一次即可:
首先需要把用到的SQL語句保存到一個文本文件里(/path/to/init/file):
UPDATE mysql.user SET Password=PASSWORD('...') WHERE User='...' AND Host= '...';
FLUSH PRIVILEGES;
接著使用init-file參數啟動MySQL服務,
shell> /etc/init.d/mysql stop
shell> mysqld_safe --init-file=/path/to/init/file &
此時,密碼就已經重置了,最后別忘了刪除文件內容,免得泄露密碼。
提示:本文用到的參數都是通過命令行mysqld_safe傳遞的,實際上也可以通過my.cnf。
參考:關于重置密碼,官方文檔里有專門的描述:How to Reset the Root Password。
原文轉自:http://blogread.cn/it/article/3782