首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 多實例部署:同機不同 Port 登入 Socket 選擇指南

     編輯:MySQL 綜合教學

MySQL 多實例部署:同機不同 Port 登入 Socket 選擇指南

單機跑多個 MySQL 實例 (如 3306/3307/3308) 時,mysql -u root -p 預設連 3306,且本機連線走 Unix Socket 而非 TCP,導致 -P 3307 不生效。本文釐清連線機制並給出正確登入姿勢。

核心機制

  • mysql -h localhost → **Unix Socket** (讀 [client] socket 或編譯時預設 /tmp/mysql.sock)。
  • mysql -h 127.0.0.1 → **TCP/IP** (走 -P port)。
  • -S /path/to/mysql.sock → 明確指定 Socket 檔案。

正確登入指令

# 實例 3306 (預設)
mysql -u root -p

# 實例 3307 (兩種等價方式)
mysql -u root -p -h 127.0.0.1 -P 3307
mysql -u root -p -S /data/mysql_3307/mysql.sock

# 實例 3308
mysql -u root -p -h 127.0.0.1 -P 3308
# 或
mysql -u root -p -S /data/mysql_3308/mysql.sock

避坑:為何 -P 3307 単獨用不生效?

mysql -u root -p -P 3307
# 實際連的是 3306,因為 -h localhost 觸發 Socket 連線,-P 被忽略

鐵律:多實例本機登入,必須顯式指定 -h 127.0.0.1 或 -S socket_path。

設定檔 my.cnf 區隔

[mysqld_3306]
port=3306
socket=/data/mysql_3306/mysql.sock
datadir=/data/mysql_3306/data
pid-file=/data/mysql_3306/mysql.pid

[mysqld_3307]
port=3307
socket=/data/mysql_3307/mysql.sock
datadir=/data/mysql_3307/data
pid-file=/data/mysql_3307/mysql.pid

[client_3307]
socket=/data/mysql_3307/mysql.sock
port=3307

啟動:mysqld --defaults-file=/etc/my_3307.cnf --defaults-group-suffix=_3307 &

驗證連線實際走向

mysql> SHOW VARIABLES LIKE 'socket';
mysql> SELECT @@port, CONNECTION_ID();
mysql> \s  -- Status 顯示 Connection: 127.0.0.1 via TCP/IP 或 Localhost via UNIX socket

結語:MySQL 多實例本機登入的核心是「區分 Socket vs TCP」。養成習慣:腳本/應用統一用 127.0.0.1:port,手動運維用 -S socket,徹底杜絕「以為連 3307 實際連 3306」的低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved