正確重置MySQL密碼

誰都不想弄丟家門鑰匙,但不管多麼小心,時間長了,這樣的事情總會發生幾次。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

發佈了477 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章