在單台伺服器上運行多個隔離的 MySQL 實例,可實現資源共享與業務隔離,適用於開發測試環境、多租戶架構、版本兼容性測試等場景。官方工具 mysqld_multi 是標準解決方案。
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = your_secure_password
[mysqld1]
datadir = /data/db/my1
port = 3306
socket = /tmp/mysql3306.sock
log-bin = /data/db/mylog1/mysql-bin
binlog_format = mixed
binlog_cache_size = 32M
expire_logs_days = 30
server-id = 1
[mysqld2]
datadir = /data/db/my2
port = 3307
socket = /tmp/mysql3307.sock
log-bin = /data/db/mylog2/mysql-bin
binlog_format = mixed
binlog_cache_size = 32M
expire_logs_days = 3
server-id = 2
# 1. 建立資料目錄
mkdir -p /data/db/my1 /data/db/my2 /data/db/mylog1 /data/db/mylog2
chown -R mysql:mysql /data/db/
# 2. 初始化資料庫 (MySQL 5.7+ 使用 mysqld --initialize-insecure)
/usr/local/mysql/scripts/mysql_install_db --datadir=/data/db/my1 --user=mysql
/usr/local/mysql/scripts/mysql_install_db --datadir=/data/db/my2 --user=mysql
chown -R mysql:mysql /data/db/my1 /data/db/my2
# 3. 安裝管理工具到系統路徑
cp /usr/local/mysql/bin/my_print_defaults /usr/bin/
cp /usr/local/mysql/bin/mysqld_multi /usr/bin/
# 4. 建立管理用戶並授權 (需在實例啟動後執行)
CREATE USER 'multi_admin'@'192.168.1.%' IDENTIFIED BY 'your_secure_password';
GRANT SHUTDOWN, PROCESS, SUPER, RELOAD ON *.* TO 'multi_admin'@'192.168.1.%';
FLUSH PRIVILEGES;
| 操作 | 指令範例 | 說明 |
|---|---|---|
| 啟動單一實例 | mysqld_multi start 1 | 啟動 GNR=1 ([mysqld1]) |
| 啟動多個實例 | mysqld_multi start 1-3 | 啟動 1 到 3 號實例 |
| 重啟實例 | mysqld_multi restart 2 | |
| 停止實例 | mysqld_multi stop 1,3 | 停止 1 和 3 號 |
| 查看狀態 | mysqld_multi report 1-2 | 顯示運行狀態、PID、Port |
# 連線實例 2 (Port 3307)
mysql -u user -p -h 127.0.0.1 -P 3307 -S /tmp/mysql3307.sock
# 或使用 TCP/IP 連線 (需確認 bind-address=0.0.0.0)
mysql -u user -p -h 127.0.0.1 -P 3307
# 指定額外配置檔啟動特定群組
mysqld_multi --defaults-extra-file=/etc/my.cnf start 1
# 停止多個群組
mysqld_multi --defaults-extra-file=/etc/my.cnf stop 8,10-13
mysqld_multi 找不到:確認已複製至 `/usr/bin/` 或使用絕對路徑。透過 mysqld_multi 統一管理多實例,配合獨立的 `datadir`、`port`、`socket`、`server-id`,可在單機上安全運行多個 MySQL 服務。生產環境建議結合資源限制、監控告警與備份策略完善運維體系。