[前言]
事情是這樣的,有人看了Allen 大的文章之後,安裝完了MySQL,要用root使用者登入,卻遇到了:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
這樣的錯誤。
通常發生這種情形呢,就是因為:
- 忘記密碼是多少。
- MySQL root 帳號出了點問題。
通常要解決的話,就是:停用 MySQL service, 進入 MySQL 安全模式, 修改 root 密碼。重新啟動 MySQL service 結束!
適用的 MySQL 版本:5.7.17 (目前官方最新版) 其他的應該也可以,不過沒有試過就是了…….
[修復步驟]
- 假設,已經安裝好 MySQL 了,還沒有的話,請參考:Allen 大的文章:https://blog.allenchou.cc/mac-apache-php-mysql-setup/
- 假設我們的 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
- 上面的步驟設定完成之後,我們可以開始本篇文章最重要的動作了。先停掉 MySQL service系統偏好設定裡的MySQL 並把管理器呼叫出來。如下圖,接著按下:stop MySQL server。
- 按下之後。回到終端機(terminal)啟用 mysqld_safe (MySQL 安全模式)
mysqld_safe --skip-grant-tables
完成之後,他會跑在 daemon service 背景服務(如下圖)
- 開一個新的終端機terminal分頁標籤。並輸入以下指令,這時候會要求密碼時候,按 enter 就好,安全模式下密碼是空的:
mysql -u root -p
- 這時候我們就會看到下面這張圖:代表我們已經成功進入安全模式了。
- 改密碼:依照下面的順序輸入 SQL 指令來修改root 密碼並退出 MySQL shell:(大小寫都可以,對於 SQL 來說是通吃的)
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourMyNewPass'; exit;
- 接著執行下面的指令找出跑 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 已經停止了。
如下圖:
- 重新啟動 MySQL service (如下圖為未啟動前的樣子,按下 start MySQL server 按鈕)
- 回到終端機,並執行:
mysql -u root -p
登入 root 使用者並使用修改過後的新密碼。
下圖所示,就會成功了!
[結語]
以上就是MySQL 搶(ㄔㄨㄥˊ)救(ㄕㄜˋ) root 密碼的步驟!謝謝收看。