在單一伺服器上運行多個獨立的 MySQL 服務,各自擁有獨立的 資料目錄、端口、Socket、配置檔、進程,邏輯上完全隔離,適合開發/測試/多租戶/版本並行等場景。
MySQL 官方內建 mysqld_multi 管理多實例,配置集中在單一 my.cnf,透過群組編號(GNR)啟停、狀態查詢。
/etc/my.cnf 範例(雙實例)[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = your_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
[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
mkdir -p /data/db/my1 /data/db/my2
chown -R mysql:mysql /data/db/my1 /data/db/my2
/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
cp /usr/local/mysql/bin/my_print_defaults /usr/bin/
cp /usr/local/mysql/bin/mysqld_multi /usr/bin/
CREATE USER 'multi_admin'@'192.168.1.%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'multi_admin'@'192.168.1.%';
FLUSH PRIVILEGES;
| 操作 | 命令範例 |
|---|---|
| 啟動實例 1 | |
| 啟動實例 1-2 | |
| 重啟實例 1 | |
| 停止實例 1-2 | |
| 查看狀態 | |
| 指定配置檔啟動 | |
| 指定配置檔停止多組 |
mysql -u multi_admin -p -P 3307 -S /tmp/mysql3307.sock
[mysqldN] 中的 N。1)、範圍(10-13)、多組逗號分隔(8,10-13)。# 建立實例服務單元
cp /usr/lib/systemd/system/mysqld.service /etc/systemd/system/mysqld@.service
# 編輯 EnvironmentFile 指向各實例專屬 my.cnf
systemctl daemon-reload
systemctl start mysqld@instance1
systemctl enable mysqld@instance1
systemd 方式更現代化,支援依賴管理、資源限制、日誌整合,建議新部署優先考慮。
mysqld_multi 是傳統多實例管理的標準工具,配置集中、操作統一。生產環境請務必:資料目錄隔離、端口/Socket 不衝突、管理帳號最小權限、監控各實例健康度。新版部署可評估 systemd 範本化方案。