錯誤原因:my.cnf 中 socket 路徑與實際運行的 mysqld 進程生成的 socket 檔案路徑不一致。常見於廠商預裝環境修改了 datadir 但未同步更新客戶端預設 socket 路徑。
$ cat /etc/my.cnf
# 發現實際配置
datadir=/dat/data/mysql
socket=/dat/data/mysql/mysql.sock
# 但客戶端預設讀取 /var/lib/mysql/mysql.sock
[client]
socket=/dat/data/mysql/mysql.sock
[mysqld]
socket=/dat/data/mysql/mysql.sock
重啟 MySQL 服務後生效。
$ 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 -u root -p
# 成功登入
核心原則:客戶端與服務端 socket 路徑必須一致。生產環境建議統一在 my.cnf 的 [client] 與 [mysqld] 區段同時設定。