首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

單機運行多個 MySQL 實例:編譯安裝差異化端口/Socket 與運行時參數法完整指南

     編輯:MySQL 資料庫相關知識

核心原則

多實例共存的關鍵在於**資源隔離**:不同 TCP 端口、不同 Unix Socket 文件、不同數據目錄、不同配置文件、不同進程 PID 文件。

方法一:源碼編譯時指定差異化路徑(永久隔離)

./configure \
  --with-tcp-port=3307 \
  --with-unix-socket=/tmp/mysql2.sock \
  --prefix=/usr/local/mysql-3307 \
  --datadir=/data/mysql2
make && make install
  • --prefix:安裝根目錄隔離。
  • --datadir:數據目錄隔離(也可運行時指定)。
  • 編譯後二進制文件自帶默認端口/Socket,啟動無需額外參數。

方法二:同一二進制,啟動參數覆蓋(靈活、推薦)

使用 mysqld_safe 或 mysqld 直接傳參:

# 實例 2
/usr/local/mysql/bin/mysqld_safe \
  --defaults-file=/etc/my2.cnf \
  --port=3307 \
  --socket=/tmp/mysql2.sock \
  --datadir=/data/mysql2 \
  --pid-file=/var/run/mysqld2.pid \
  --log-error=/var/log/mysqld2.err &

my2.cnf 至少包含:

[mysqld]
port=3307
socket=/tmp/mysql2.sock
datadir=/data/mysql2
pid-file=/var/run/mysqld2.pid
log-error=/var/log/mysqld2.err

客戶端連接指定實例

方式示例
TCP 端口mysql -h 127.0.0.1 -P 3307 -u root -p
Unix Socketmysql -S /tmp/mysql2.sock -u root -p
環境變量export MYSQL_TCP_PORT=3307; export MYSQL_UNIX_PORT=/tmp/mysql2.sock
客戶端配置文件 ~/.my.cnf[client] port=3307 socket=/tmp/mysql2.sock

初始化腳本管理

  • 複製 /etc/init.d/mysql 為 /etc/init.d/mysql2,修改內部 datadir、pid_file、socket、port 變量。
  • chkconfig --add mysql2 註冊服務。

⚠️ 絕對禁忌

嚴禁兩個實例指向同一 datadir 同時寫入數據(除非只讀掛載)。InnoDB/MyISAM 無法協調雙進程並發寫入同一表空間/文件,會導致數據損壞。

應用場景

  • 開發/測試/生產環境隔離在單機。
  • 多版本共存驗證升級兼容性。
  • 資源充足物理機切分多租戶實例。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved