首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 伺服器端 ERROR 2002 連線失效完整排查指南

     編輯:MySQL 資料庫相關知識

錯誤現象

ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

環境:FreeBSD 4.10-RELEASE,嘗試以 root 登入 MySQL 失敗,mysql restart 同樣報錯。

根因分析

  1. Socket 檔案遺失:Plesk 等管理面板誤刪 /tmp/mysql.sock。
  2. 殘留進程阻礙重啟:舊的 mysqld 與 mysqld_safe 進程仍在運行,佔用資源導致新啟動失敗。
  3. Socket 本質是暫存檔:MySQL 啟動時會自動建立 mysql.sock,重開機即可自動恢復。

逐步排查與修復

1. 確認 Socket 確實不存在

find / -name mysql.sock
# 無輸出,確認檔案確實遺失

2. 嘗試常規重啟失敗

mysql restart
# 仍報 ERROR 2002

3. 檢查並殺掉殘留進程

ps -aux | grep mysql
# 找到 mysqld (PID 137) 與 mysqld_safe (PID 111)
kill 137
kill 111

4. 再次重啟仍失敗 → 直接重開機

因 Socket 為暫存檔,重開機後 /tmp 清空,MySQL 守護進程啟動時會自動重建 Socket。

reboot
# 10 秒後重新連線
mysql -u root -p
# 成功進入 MySQL monitor

核心知識點總結

  • mysql.sock 是 Unix Domain Socket,用於本地客戶端與 mysqld 通訊,預設放在 /tmp 或 /var/run/mysqld。
  • 啟動腳本 mysqld_safe 會自動建立 Socket,重開機是最徹底的重建方式。
  • 若不想重開機,可嘗試:
    mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld
    修改 my.cnf 指定 socket=/var/run/mysqld/mysql.sock,再啟動服務。
  • 生產環境建議將 Socket 路徑固定在非 /tmp 目錄,避免系統定期清理導致連線中斷。

預防建議

  1. 在 my.cnf `[mysqld]` 區段明確設定 socket=/var/lib/mysql/mysql.sock(或其他持久化路徑)。
  2. 使用 systemctl restart mysqld 或官方啟動腳本管理服務,避免手動 kill 導致資源洩漏。
  3. 監控 mysql.sock 存在性,異常時告警並自動嘗試重啟服務。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved