錯誤完整信息:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
MySQL Client 預設讀取 /etc/my.cnf 中 [client] 區塊的 socket 參數,或編譯時的默認路徑 /var/lib/mysql/mysql.sock。若 Server 實際運行的 socket 路徑被修改(如遷移數據目錄),Client 找不到 Socket 文件,拋出此錯。
雲平台(Azure)MySQL 實例,供應商修改了數據目錄與 Socket 路徑:
[mysqld]
datadir=/dat/data/mysql
socket=/dat/data/mysql/mysql.sock
但 Client 仍嘗試連接 /var/lib/mysql/mysql.sock,導致失敗。
ln -s /dat/data/mysql/mysql.sock /var/lib/mysql/mysql.sock
# 若 /var/lib/mysql 目錄不存在,先建立目錄
mkdir -p /var/lib/mysql
ln -s /dat/data/mysql/mysql.sock /var/lib/mysql/mysql.sock
mysql -uroot -p -S /dat/data/mysql/mysql.sock
# 或在 [client] 區塊配置
[client]
socket=/dat/data/mysql/mysql.sock
# JDBC
jdbc:mysql://localhost:3306/db?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory
# 或使用 TCP 連接(繞過 Socket)
jdbc:mysql://127.0.0.1:3306/db
mysql -uroot -p
# 能正常進入交互模式即成功
my.cnf,保證 Client/Server 一致datadir、socket、pid-file、log-error 等所有路徑相關參數Socket 找不到本質是「Client 與 Server 對 Socket 路徑認知不一致」,對齊即可解決。