故障現象
今天本地項目怎么都啟動不了,查看日志發現是連接本地數據庫超時,報錯信息如下:
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
排查過程
首先查看代碼,發現也沒有修改到數據庫相關的內容,突然出現有點詭異。
轉念一想會不會是數據庫出了問題,果然,使用數據庫管理工具 Datagrip 連接的時候也報了同樣的錯誤,所以基本確定是 mysql 出了問題。
首先查看 **brew **安裝的本地 mysql 服務的狀態,這里有三種方法查看:
- 通過
ps
命令
ps -ef | grep mysql
通過 ps
命令加 grep
過濾,可以查看是否有 msyql 進程在進行。
- 通過
lsof
命令
lsof -i:3306
也可以通過 lsof
命令,查看指定端口有沒有啟動,我當時創建的時候用的默認端口 3306 端口,如果你設置了其它端口,可以改成對應的
- 通過 brew 的
services
查看(推薦)
brew 的 services
是用來管理后台服務命令,它主要有如下功能:
好的,直接使用
brew services
命令看看 mysql 的狀態
可以看到列出的狀態通常有三種,分別是:
- stopped
- 黃色的 started
- 綠色的 started
其中 stopped 沒啥好說的就是此服務是關閉的。那黃色的與綠色的 started 分別代表什么呢?首先綠色的 started 代表服務是啟動的並且正常運行。黃色查了半天,發現代表未知,也就是說可能正常啟動着,也可能出現問題,那為什么不直接顯示未知呢?看樣子是為了兼容,具體可以看這篇文章 [What is the meaning yellow service "started" status on Homebrew? - Stack Overflow](https://stackoverflow.com/questions/41873704/what-is-the-meaning-yellow-service-started-status-on-homebrew/55798920 "What is the meaning yellow service "started" status on Homebrew? - Stack Overflow")。
很不幸的是,這個黃色對我來說是故障。
解決方法
本來想重啟一下就可以了,首先重啟 mysql 服務: brew services restart mysql
,結果重啟完還是不行。然后我重啟電腦,好吧,還是失敗。
接着搜索。
在 google 搜索 brew services yellow mysql 可以發現不只我一個人遇到。很多人給了解決方案,但是還是折騰了很久,才找到對於我有用的,這里直接貼兩個。
這個方案大致是關服務、卸載服務、刪除服務數據、升級 brew 、再重新安裝服務。我主要看他評論下面兩個 Thanks 覺得應該可以,結果還是不行。可能不適合我這種情況。
- 完全重裝 mysql
但是重裝之路也很艱難,怎么都啟動不了,出現了其它問題。應該是沒有卸載干凈,后來按照這個 brew install mysql on macOS - Stack Overflow 解決了。
發現之前沒有使用 remove & cleanup 命令,可能導致沒有卸載干凈。按步驟一步一步來就好了。
😔 難受,莫名其妙出現的問題,折騰了幾個小時,謹以此文紀念我逝去的幾個小時的青春。
引用
- [What is the meaning yellow service "started" status on Homebrew? - Stack Overflow](https://stackoverflow.com/questions/41873704/what-is-the-meaning-yellow-service-started-status-on-homebrew/55798920 "What is the meaning yellow service "started" status on Homebrew? - Stack Overflow")
- homebrew - brew services list shows mysql running but cannot connect - Stack Overflow
- brew install mysql on macOS - Stack Overflow