MySQL Socket(Unix Domain Socket)是本機進程間通訊的特殊檔案,比 TCP/IP 回環更高效。正確配置 Socket 路徑是多實例管理、免密登入、監控採集的關鍵。
my.cnf 中 [mysqld] 區段指定:
[mysqld]
socket = /tmp/mysql3306.sock
port = 3306
同一主機跑兩個實例:
/tmp/mysql3306.sock/tmp/mysql3307.sock# 指定 Socket(推薦,無需記住 Port)
mysql -uroot -p --socket=/tmp/mysql3307.sock
# 等價於 -S 縮寫
mysql -uroot -p -S /tmp/mysql3307.sock
# 傳統指定 Port
mysql -uroot -p --port=3307 --host=127.0.0.1
# 注意:-h localhost 會走 Socket,必須用 127.0.0.1 強制 TCP
本機 Socket 連線時,MySQL 允許 無密碼登入(預設 auth_socket 外掛或 skip-grant-tables 模式):
mysql -S /tmp/mysql3307.sock
# 直接進入 Shell,無需 -p
Zabbix、Prometheus MySQL Exporter、Percona Monitoring 等均支援 Socket 連線採集,配置範例:
# Zabbix agent 設定
UserParameter=mysql.ping[*],mysqladmin -S /tmp/mysql3306.sock ping
UserParameter=mysql.status[*],mysql -S /tmp/mysql3306.sock -e "SHOW GLOBAL STATUS"
mysql:mysql,權限 srwxrwxrwx,刪除後服務重啟自動重建mysql.sock vs mysql.sock.lock:前者為通訊端,後者為鎖檔,勿混淆-v /var/run/mysqld:/var/run/mysqld)善用 Socket,多實例管理更清晰,監控採集更輕量,本機連線更極速。