mysqld_multi可集中管理多mysql实例,需配置[mysqld_multi]和[mysqldn]段,指定各实例port、datadir等唯一参数,初始化须用对应段执行--initialize并确保权限正确,启动/停止需带实例编号。

直接用 mysqld_multi 管理多实例,前提是你的 MySQL 安装包自带该工具(5.5+ 基本都有),且你愿意接受「一个配置文件管所有实例」的集中式管理方式——它省去多个启动脚本的维护成本,但每个实例的定制自由度会略低。
mysqld_multi 配置文件必须包含 [mysqld_multi] 和至少一个 [mysqldN] 段
不能把 [mysqld] 当作实例段来用,mysqld_multi 只认形如 [mysqld1]、[mysqld2] 这样的节名。否则执行 mysqld_multi report 会提示「No groups found」。
-
[mysqld_multi]段里必须指定mysqld和mysqladmin的绝对路径,比如mysqld = /usr/local/mysql/bin/mysqld_safe - 日志路径建议显式指定,如
log = /var/log/mysqld_multi.log,否则默认写到/tmp下,容易被清理 - 每个
[mysqldN]段里,port、datadir、socket、pid-file必须互不相同;server-id在启用复制时也必须唯一 - 不要在
[mysqldN]段里写[client]或[mysql]这类客户端段,它们会被忽略
初始化每个实例的数据目录前,要确保 user 和权限正确
mysqld_multi 不负责初始化数据目录,这步必须手动完成,且必须用对应实例的配置文件调用 mysqld --initialize 或 mysql_install_db(取决于版本)。常见错误是直接复用主配置跑初始化,结果所有实例共用一套系统表空间,启动时立刻报错 InnoDB: Operating system error number 13 in a file operation(权限拒绝)或 Table 'mysql.plugin' doesn't exist。
- 命令示例:
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data --defaults-file=/etc/my.cnf --mysqld=mysqld7(注意最后的--mysqld=mysqld7是告诉初始化程序读取[mysqld7]段) -
datadir目录需由mysql用户完全拥有:chown -R mysql:mysql /data/3307/data - 若用
mysql_install_db(旧版),必须加--defaults-file参数指向完整配置文件,否则它只读[mysqld]段
启动/停止必须带实例编号,且不能混用 mysqld_safe 和 mysqld
mysqld_multi start 1 启动的是 [mysqld1],不是端口 3306 —— 编号和端口无强制绑定关系。如果误写成 mysqld_multi start 3306,它会尝试找 [mysqld3306],找不到就静默失败。
- 启动多个:用空格分隔,如
mysqld_multi start 1 2 - 检查状态:
mysqld_multi report只显示进程是否存在;真正验证是否可用,得连上去:mysql -S /data/3307/mysql.sock -e "SELECT VERSION();" - 若配置中用了
mysqld = /usr/local/mysql/bin/mysqld(非 safe 版),则mysqld_multi会直接拉起mysqld进程,此时它没有自动重启能力;换成mysqld_safe才具备崩溃后自拉起逻辑 - 停止单个实例时,
mysqladmin必须能通过 socket 或 port 访问到目标实例,否则超时后报Warning: Can't connect to server,但进程其实还在跑
最易被忽略的是:每次修改 /etc/my.cnf 后,必须确认 mysqld_multi 能正确解析新段——它不会报错加载失败,而是直接跳过语法错误的段。建议改完先运行 mysqld_multi --config-file=/etc/my.cnf report 看输出是否列出你新增的实例编号。











