Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

MAMP 重設 MySQL 密碼

因為電腦的開發環境使用 MAMP,所以筆記一下,
下次如果不小心搞砸了比較容易恢復。

問題發生起因

在 mysql_error.log 檔案中,發現了幾筆 [Note] Access denied for user ‘root’@’localhost’ (using password: YES) 的警告。想要用正常管道重設 root 密碼,結果在重設過程中,按下了 control + c,結果這段被終端機解讀成文字的指令成了新的密碼⋯⋯

系統環境

  • MAMP Pro 5.4
  • MySQL 5.7.26

MAMP 與 MAMP Pro 的 MySQL 精靈 (daemon) 在同一個路徑下,所以基本上以下的解法是可以共通的。其他作業系統只需要找到 MySQL 精靈的位置,解法亦同。

解決步驟

首先,關閉 MySQL 服務。接著透過終端機指令碼重啟 MySQL,並加入 –skip-grant-tables 與 –skip-networking 的選項。前者會暫時性准許所有使用者不需要透過密碼登入,因此基於安全性考量,加入了後者,用以中止遠端連線。

程式碼參考

$ /Applications/MAMP/Library/bin/mysqld_safe \
--skip-grant-tables \
--skip-networking \
--socket=/Applications/MAMP/tmp/mysql/mysql.sock \
--pid-file=/Applications/MAMP/tmp/mysql/mysql.pid &

/Applications/MAMP/Library/bin/mysqld_safe 是安全模式精靈的路徑,如果在其他作業系統,有可能已經動態連結到 mysqld_safe 的指令中。

接著會看到如下提示:

mysqld_safe Starting mysqld daemon with databases from /Applications/MAMP/db/mysql

輸入下列指令以開啟 mysql,輸入 FLUSH PRIVILEGES 清除所有權限,並將 NewPassword 改成欲使用的密碼。

$ /Applications/MAMP/Library/bin/mysql
#如果是其他作業系統,或自行安裝的 mysql
$ mysql
$ mysql> FLUSH PRIVILEGES;
$ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

關於 FLUSH PRIVILEGES 的設定,根據 MySQL 的文件,是因為我們在開啟安全模式時,啟用了 –skip-grant-tables 的選項,藉此繞過密碼驗證,也就是在該 MySQL 的工作階段中,並不會有任何密碼驗證,此時的系統較不安全。因此透過 FLUSH PRIVILEGES 的指令,讓該工作階段重新讀取權限資料表 (grant table)。

參考文件

Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料