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

MySQL ERROR 2002 (HY000) Socket 連線失敗:診斷流程與三種解決方案

     編輯:MySQL 資料庫相關知識

錯誤現象


mysql -uroot -p123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysqldata/mysql.sock' (111)

診斷步驟

  1. 確認 MySQL 進程存活:ps -ef | grep mysqld 或 netstat -ntlp | grep 3306
  2. 檢查實際 Socket 路徑:grep socket /etc/my.cnf、mysqladmin variables | grep socket、錯誤日誌 Version: ... socket: '/tmp/mysql.sock'
  3. 比對客戶端尋找路徑與實際路徑:錯誤提示路徑 ≠ 實際路徑 → 路徑不一致

三種解決方案

方案一:修正 my.cnf [client] 區段(推薦,根治)


# /etc/my.cnf
[client]
socket = /tmp/mysql.sock   # 與 [mysqld] 區段一致

[mysqld]
socket = /tmp/mysql.sock

systemctl restart mysqld
mysql -uroot -p  # 正常連線

方案二:建立軟連結(快速臨時)


# 客戶端找 /data/mysqldata/mysql.sock,實際在 /tmp/mysql.sock
rm -f /data/mysqldata/mysql.sock
ln -s /tmp/mysql.sock /data/mysqldata/mysql.sock
ls -l /data/mysqldata/mysql.sock
# lrwxrwxrwx 1 root root 15 Oct 11 14:00 /data/mysqldata/mysql.sock -> /tmp/mysql.sock

方案三:連線時指定協議/主機(繞過 Socket)


# 強制用 TCP 連線本機
mysql -uroot -p -h 127.0.0.1 --protocol=tcp
# 或
mysql -uroot -p -h 127.0.0.1 -P 3306

原理:-h localhost 預設用 Unix Socket;-h 127.0.0.1 強制用 TCP。

常見誤區與預防

  • 多實例環境:每實例獨立 socket、port、datadir,my.cnf 需用 [mysqld] 或 !include 區分
  • PHP 連線失敗:修改 php.ini mysqli.default_socket / pdo_mysql.default_socket 指向正確路徑
  • Docker/容器:掛載 Socket 檔或用 TCP 連線,避免命名空間隔離導致找不到

小結

ERROR 2002 90% 是 Socket 路徑不一致。根治:my.cnf 統一 [client] 與 [mysqld] 的 socket 參數。臨時:軟連結或強制 TCP。多實例、PHP、容器環境需額外注意配置一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved