mysql.sock 是 MySQL 在 Unix/Linux 系統上用於 本地 Socket 連線 的特殊文件。當客戶端與 Server 運行在同一台機器,且連線參數指定為 localhost 或留空 Host 時,MySQL 會優先嘗試透過 Unix Domain Socket(而非 TCP/IP)進行通訊,效能更高、延遲更低。
編譯安裝 MySQL 時,會將範本配置複製到 /etc/my.cnf:
cp support-files/my-small.cnf /etc/my.cnf
查看 socket 路徑:
[mysqld] socket = /tmp/mysql.sock port = 3306 ...
客戶端連線時可顯式指定:
mysql -u root -p -S /tmp/mysql.sock
| 方式 | 適用場景 | 特點 |
|---|---|---|
| TCP/IP | 跨主機、容器、雲端 | 需指定 IP:Port,通用性強 |
| Unix Socket | 本機連線 | 無網路開銷,速度更快;修改 port 不影響連線 |
因為 mysql.sock 隨 MySQL 啟動動態生成,修改 my.cnf 的 port 後重啟服務,socket 文件會自動更新,本地連線無需改動客戶端配置。
find / -name mysql.sock 定位實際路徑,連線時加 -S 指定。datadir 目錄下會自動重建。my.cnf 指定不同 socket 路徑。若持續無法解決,可強制使用 TCP 連線:mysql -h 127.0.0.1 -P 3306(注意用 127.0.0.1 而非 localhost)。
Windows 不支援 Unix Socket,但提供 Named Pipe(命名管道) 與 Shared Memory 兩種本地高效通訊方式,需在 my.ini 啟用 enable-named-pipe 或 shared-memory。