MySQL官方自带的多实例管理工具mysqld_multi
mysqld_multi 是 MySQL 官方自带的 多实例管理工具,它能在同一台服务器上方便地启动、停止和监控多个 mysqld 实例,非常适合 DBA / SRE 在测试、开发或多业务分区场景下使用。
一、mysqld_multi 简介
作用:
- 管理多个
mysqld实例(启动、停止、查看状态) - 统一配置文件管理(共用一个
my.cnf) - 避免手动启动多个
mysqld_safe的繁琐
运行机制:
mysqld_multi是一个 Perl 脚本(通常在/usr/bin/mysqld_multi)它读取
my.cnf中的[mysqldN]配置段来识别不同实例每个实例必须使用:
- 独立的
port - 独立的
socket - 独立的
datadir - 可选独立的
log-error
- 独立的
二、配置示例
假设我们要在一台服务器上运行两个实例:
- 实例 1:端口 3306
- 实例 2:端口 3307
编辑 /etc/my.cnf:
1 | [mysqld_multi] |
注意:
datadir需事先创建并初始化(使用mysqld --initialize-insecure或mysql_install_db)- 每个实例都要有唯一的 socket、port、pid-file、日志路径
三、初始化数据目录
1 | # 为实例1初始化 |
四、使用 mysqld_multi 管理实例
启动所有实例
1 | mysqld_multi start |
启动指定实例
1 | mysqld_multi start 1 |
停止指定实例
1 | mysqld_multi stop 2 |
查看状态
1 | mysqld_multi report |
输出示例:
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is not running
五、权限安全
mysqld_multi 登录需要管理账号:
1 | mysql> CREATE USER 'multiadmin'@'localhost' IDENTIFIED BY '123456'; |
建议仅限
localhost,并且账号权限最小化。
六、结构图(Mermaid)
graph TD
A[服务器] --> B[mysqld_multi 管理器]
B --> C[mysqld1 实例
Port:3306
Socket:/data/mysql3306/mysql.sock]
B --> D[mysqld2 实例
Port:3307
Socket:/data/mysql3307/mysql.sock]
C --> E[DataDir:/data/mysql3306/data]
D --> F[DataDir:/data/mysql3307/data]
七、常见问题(FAQ)
| 问题 | 原因与解决 |
|---|---|
| 启动时报错 “Can’t connect to local MySQL server” | 检查 socket 路径或权限 |
| 一个实例启动失败 | 查看对应的 log-error 文件 |
| “mysqld_multi cannot find mysqld_safe” | 确认配置文件 [mysqld_multi] 段路径正确 |
| 实例冲突 | 确保端口、socket、pid-file 唯一 |