mysqld_multi官方提供的 Perl 腳本,通過單一配置文件管理多個 [mysqldN] 實例組,支持批量啟停、狀態報告。
/etc/my.cnf 定義 [mysqld_multi] 管理段[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = MultiPass123!
log = /usr/local/mysql/logs/mysqld_multi.log
# config-file 由啟動腳本傳入,不寫死在此處
/usr/local/mysql/etc/mysqld_multi.cnf[mysqld1]
socket = /tmp/mysql.sock1
port = 3306
pid-file = /usr/local/mysql/var1/mysqld.pid
datadir = /usr/local/mysql/var1
user = mysql
server-id = 1
log-bin = /usr/local/mysql/var1/binlog
# 實例 1 專屬參數...
innodb_buffer_pool_size = 512M
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/mysqld.pid
datadir = /usr/local/mysql/var2
user = mysql
server-id = 2
log-bin = /usr/local/mysql/var2/binlog
innodb_buffer_pool_size = 512M
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/mysqld.pid
datadir = /usr/local/mysql/var3
user = mysql
server-id = 3
log-bin = /usr/local/mysql/var3/binlog
innodb_buffer_pool_size = 512M
/usr/sbin/mysqld_multi.server# 從源碼包 support-files/mysqld_multi.server 複製
cp /usr/local/src/mysql-5.7.42/support-files/mysqld_multi.server /usr/sbin/
chmod 755 /usr/sbin/mysqld_multi.server
# 編輯腳本,強制指定 config-file(關鍵修復)
vim /usr/sbin/mysqld_multi.server
# 找到 start/stop/report case 分支,追加 --config-file 參數
'$mysqld_multi' start $2
# 改為
'$mysqld_multi' --config-file=/usr/local/mysql/etc/mysqld_multi.cnf start $2
# 同理修改 stop、report 分支
for i in 1 2 3; do
mkdir -p /usr/local/mysql/var$i
chown -R mysql:mysql /usr/local/mysql/var$i
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/var$i
done
# 啟動所有
mysqld_multi.server start
# 或指定範圍
mysqld_multi --config-file=/usr/local/mysql/etc/mysqld_multi.cnf start 1-3
# 以實例 1 為例,登錄並授權
mysql -uroot -S /tmp/mysql.sock1 -p -e "
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'MultiPass123!';
FLUSH PRIVILEGES;
"
# 其餘實例同理執行(或複製 user 表權限)
| 操作 | 命令 |
|---|---|
| 啟動所有 | mysqld_multi.server start |
| 停止所有 | mysqld_multi.server stop |
| 啟動指定 | mysqld_multi --config-file=... start 2 |
| 停止指定 | mysqld_multi --config-file=... stop 2 |
| 啟動範圍 | mysqld_multi --config-file=... start 1-3 |
| 查看狀態 | mysqld_multi --config-file=... report |
log-bin、server-id=1、binlog_format=ROW、gtid_mode=ONserver-id=2/3、relay-log、read_only=ON、gtid_mode=ONCREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.1';
FLUSH PRIVILEGES;
CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
socket、port、pid-file、datadirinnodb_buffer_pool_size ≤ 物理內存 70%,預留 OS/其他進程ulimit -n 65535、open_files_limit 同步調大datadir、log-bin 目錄添加策略multi_admin 缺 SHUTDOWN 權限或密碼錯誤mysqld_multi 是 MySQL 多實例管理的**官方標準工具**,通過 [mysqldN] 分組配置、統一啟停腳本、專用管理賬號,實現單機多實例的全生命週期管理。掌握其配置邏輯與授權機制,能快速搭建測試拓撲、驗證複製邏輯、演練故障轉移。但請牢記:**單機多實例僅適配開發測試、非核心業務、資源受限場景**,生產核心鏈路請堅持「一機一實例」或容器化編排。