生產環境 MySQL 因誤操作導致 PID 文件與 Socket 文件丟失,服務雖存活但管理命令失效、命令行無法登錄。本文記錄完整故障現象、根因分析、修復步驟與預防措施。
/var/lib/mysql/libexec/mysqld restart(以 root 直接啟動進程)→ 報錯退出,但殘留進程佔用 3306 端口。service mysql restart → 提示 MySQL manager or server PID file could not be found! [FAILED]。mysql -u root -p → ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'。service mysql status → 正常顯示運行中(PID 文件丟失前狀態)。mysqld 直接啟動非服務腳本管理,未生成 PID 文件;service mysql stop 讀取 PID 文件發送信號失敗。/etc/init.d/mysqld / service mysql 完全依賴 pid-file 和 socket 路徑配置一致。ps aux | grep mysql | grep "user=mysql" | grep -v grep | awk '{print $2}'
# 假設輸出 10949
service mysql status # 應顯示 MySQL running (10949) [OK] service mysql restart # 應正常 Shutting down / Starting 並生成 socket
service mysql start └─ 讀取 my.cnf [mysqld] pid-file, socket └─ 啟動 mysqld_safe → mysqld └─ mysqld 創建 pid-file, socket └─ 返回成功 service mysql stop └─ 讀取 pid-file 獲取 PID └─ kill -TERM PID └─ 等待進程退出並清理 socket └─ 返回成功 mysql -u root -p └─ 讀取 my.cnf [client] socket └─ 連接 Unix Domain Socket └─ 登錄成功
理解依賴鏈,故障時才能精準定環節、補文件、通鏈路。