Homebrew 安裝的 MySQL 5.7.12 在 macOS El Capitan (10.11) 上頻繁啟動失敗,系統日誌反覆出現 Service only ran for 0 seconds。本文記錄從現象到根因的完整排查鏈路,核心原因是 ibdata1 文件權限異常。
Jun 2 20:08:49 zrong-mbp com.apple.xpc.launchd[1] (homebrew.mxcl.mysql): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Jun 2 20:11:08 zrong-mbp com.apple.xpc.launchd[1] (homebrew.mxcl.mysql): This service is defined to be constantly running and is inherently inefficient.
launchd 每 10 秒拉起一次,MySQL 瞬間退出,陷入死循環。
網上建議刪除 plist 中的 KeepAlive 和 RunAtLoad,實測無效。真正錯誤藏在 MySQL 自身錯誤日誌:
/usr/local/var/mysql/{hostname}.err
2016-06-02T15:11:34.350795Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
關鍵線索:ibdata1 must be writable —— 系統表空間文件不可寫。
ls -la /usr/local/var/mysql/
# 發現 err 文件屬主為 _mysql:admin,但 ibdata1 等核心文件屬主異常
可能原因:手動操作、備份還原、系統升級導致權限重置。
sudo chown -R _mysql:admin /usr/local/var/mysql
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
遞歸修正整個數據目錄所有權,MySQL 進程以 _mysql 用戶運行,即可正常讀寫。
sudo brew services start mysql 會導致部分文件變為 root 擁有,後續非 root 啟動必失敗datadir 指向非 Homebrew 管理路徑(如 /data/mysql),避免升級覆蓋權限問題看似微小,實則是資料庫啟動的生死線。養成「先看 error log,再改配置」的肌肉記憶,能省去無數彎路。