錯誤現象:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
核心原因:**客戶端尋找的 Socket 文件路徑與 MySQL 服務端實際生成的路徑不一致**。
systemctl status mysqld
# 或
/etc/init.d/mysqld status
若服務未運行,優先啟動服務:systemctl start mysqld。
find / -name mysql.sock 2>/dev/null
# 典型輸出:/data/mysql/mysql.sock 或 /tmp/mysql.sock
驗證 Socket 可用性:
mysql -u root -p -S /data/mysql/mysql.sock
-S 參數指定 Socket 路徑,若能連上,說明服務正常,問題在客戶端配置。
ls -l /data/mysql/mysql.sock
# 確保屬主為 mysql:mysql,權限 755 或 777
chown -R mysql:mysql /data/mysql/mysql.sock
chmod 755 /data/mysql/mysql.sock
編輯 /etc/my.cnf,在 [client] 和 [mysqld] 兩個段落**同時**指定一致路徑:
[client]
socket = /data/mysql/mysql.sock
[mysqld]
socket = /data/mysql/mysql.sock
原理: [mysqld] 控制服務端生成路徑;[client] 控制 mysql、mysqldump 等客戶端工具默認尋找路徑。雙向綁定才能徹底解決。
--socket 參數導致連錯實例。tmpwatch 清理: /tmp/mysql.sock 被系統定時任務誤刪。建議將 Socket 放入非 /tmp 目錄(如 /var/lib/mysql 或 /data/mysql)。ausearch -m avc,或臨時設為 Permissive 模式驗證。#!/bin/bash
REAL_SOCK=$(find / -name mysql.sock 2>/dev/null | head -1)
if [ -z "$REAL_SOCK" ]; then
echo "Socket 文件不存在,請檢查 MySQL 是否運行"
exit 1
fi
echo "發現 Socket: $REAL_SOCK"
sed -i "s|^socket.*|socket = $REAL_SOCK|" /etc/my.cnf
systemctl restart mysqld
echo "配置已更新並重啟服務"
掌握「找真實路徑 → 驗證連通 → 雙向配置」三步曲,即可秒殺此類連接故障。