在一台伺服器上運行多個 MySQL 實例,透過 mysqld_multi 統一啟停監控。本文採用「單一 my.cnf 包含多 [mysqldN] 區段」模式,適合實例參數高度一致、追求集中維護的場景。
mkdir -p /data/mysql/{3306,3307}/{data,logs,tmp}
chown -R mysql:mysql /data/mysql
mysqld --datadir=/data/mysql/3306/data --initialize-insecure --user=mysql
mysqld --datadir=/data/mysql/3307/data --initialize-insecure --user=mysql
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = xxx
[mysqld3306]
port=3306
socket=/data/mysql/3306/tmp/mysql.sock
datadir=/data/mysql/3306/data
pid-file=/data/mysql/3306/logs/mysqld.pid
log-error=/data/mysql/3306/logs/error.log
server-id=3306
[mysqld3307]
port=3307
socket=/data/mysql/3307/tmp/mysql.sock
datadir=/data/mysql/3307/data
pid-file=/data/mysql/3307/logs/mysqld.pid
log-error=/data/mysql/3307/logs/error.log
server-id=3307
# 通用參數可放在 [mysqld] 或各區段重複
[mysqld]
character-set-server=utf8mb4
innodb_buffer_pool_size=1G
...
mysqld_multi start 3306,3307
mysql -u root -p -S /data/mysql/3306/tmp/mysql.sock -e "SELECT @@port;"
mysqld_multi stop 3306
mysqld_multi report
log-error 指向獨立文件,故障定位互不干擾。/etc/rc.local 呼叫 mysqld_multi start。| 維度 | 單一配置文件 | 獨立配置文件 |
|---|---|---|
| 維護便利性 | 集中修改,但誤改影響面大 | 隔離修改,遷移複製極簡單 |
| 參數差異化 | 需在各區段重複 | 天然隔離,互不干擾 |
| 適合場景 | 實例同質化高、統一規格 | 業務異構、參數差異大 |
系列第二篇(獨立配置文件模式)請參考《MySQL 多實例配置實戰(二)》。