在 MAC OS X 下安裝 MySQL 與簡易故障排除

[前言]

事情是這樣的,有人看了Allen 大的文章之後,安裝完了MySQL,要用root使用者登入,卻遇到了:

 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 

這樣的錯誤。

通常發生這種情形呢,就是因為:

  1. 忘記密碼是多少。
  2. MySQL root 帳號出了點問題。

通常要解決的話,就是:停用 MySQL service, 進入 MySQL 安全模式, 修改 root 密碼。重新啟動 MySQL service 結束!

適用的 MySQL 版本:5.7.17 (目前官方最新版) 其他的應該也可以,不過沒有試過就是了…….

[修復步驟]

  1. 假設,已經安裝好 MySQL 了,還沒有的話,請參考:Allen 大的文章:https://blog.allenchou.cc/mac-apache-php-mysql-setup/
  2. 假設我們的 shell 環境預設就是使用:bash 當作我們的環境。我們先來設定幾個東西:[設定 .bash_profile] 在家目錄下設定這個檔案原因是為了要:使我們的 .bashrc 能夠完整的被執行。以下是其內容:
     if [ -f ~/.bashrc ]; then source ~/.bashrc fi 

    [設定 .bashrc] 因為MySQL 執行位置並沒有在 $PATH 環就變數裡面,所以我們必須要加進去。那還有一個夠簡單的方式,就是使用 alias 指令把它設定到 .bashrc 檔裡面,其路徑也在家目錄下面。以下是其內容:

     alias mysql="/usr/local/mysql/bin/mysql" alias mysqld_safe="sudo /usr/local/mysql/bin/mysqld_safe" 

    這樣在執行 mysql 和 mysqld_safe 的時候,就不用打那一長串的指令了。上述兩個步驟做完,需重開 terminal。

    或者是執行下面兩個指令:這有點像是重新載入這兩個設定檔案。

     source ~/.bash_profile source ~/.bashrc 
  3. 上面的步驟設定完成之後,我們可以開始本篇文章最重要的動作了。先停掉 MySQL service系統偏好設定裡的MySQL 並把管理器呼叫出來。如下圖,接著按下:stop MySQL server。

  4. 按下之後。回到終端機(terminal)啟用 mysqld_safe (MySQL 安全模式)
    mysqld_safe --skip-grant-tables

    完成之後,他會跑在 daemon service 背景服務(如下圖)

  5. 開一個新的終端機terminal分頁標籤。並輸入以下指令,這時候會要求密碼時候,按 enter 就好,安全模式下密碼是空的:
    mysql -u root -p
  6. 這時候我們就會看到下面這張圖:代表我們已經成功進入安全模式了。
  7. 改密碼:依照下面的順序輸入 SQL 指令來修改root 密碼並退出 MySQL shell:(大小寫都可以,對於 SQL 來說是通吃的)
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourMyNewPass';
    exit;
    
  8. 接著執行下面的指令找出跑 daemon process 的 process id.
     ps ax | grep mysql 

    這時候我們可以發現有三個 process id 是我們需要把它給砍掉的。

    因為可以從 command 中得知,第一個是我們跑的,第一個去跑後面兩個,所以總共會有三個。

    分別是:2382, 2383 以及 2464 所以我們要執行下面的指令:


     sudo kill 2382 2383 2464 

    每次的 process id 會不同,因為 process id 是由作業系統去派發的,所以每次 id 都會不一樣。這邊是示意。

    我們把 process kill 掉之後,這時我們切換到第一個標籤頁的 terminal 這時候我們可以發現:這個 daemon service 已經停止了。

    如下圖:

  9. 重新啟動 MySQL service (如下圖為未啟動前的樣子,按下 start MySQL server 按鈕)

  10. 回到終端機,並執行:
     mysql -u root -p 

    登入 root 使用者並使用修改過後的新密碼。

    下圖所示,就會成功了!

[結語]

以上就是MySQL 搶(ㄔㄨㄥˊ)救(ㄕㄜˋ) root 密碼的步驟!謝謝收看。

[參考資料]

  1. [Mac]不用懶人包,在 OS X 上安裝 Apache, PHP, MySQL
  2. How to Change the MySQL root Password in Linux or macOS via Command Line