在mysql8.0的实际使用场景中,经常需要同时运行多个独立的数据库实例,比如开发、测试、生产环境需要隔离,或者同一台服务器需要承载多个不同业务的数据库服务。通过mysqld_multi工具可以统一管理多个mysql实例,避免手动逐个操作服务的繁琐,还能灵活配置不同实例的端口、数据目录等参数。

环境准备与前置条件
首先需要确保已经正确安装了mysql8.0,并且mysqld_multi工具已经随安装包一同部署,一般mysql8.0的二进制安装包或者系统源安装都会包含该工具。同时需要提前规划好每个实例的端口、数据目录、日志目录、socket文件路径,避免路径冲突。
规划实例参数示例
这里以配置两个实例为例,参数规划如下:
| 实例编号 | 端口 | 数据目录 | socket文件 | 日志文件 |
|---|---|---|---|---|
| 1 | 3306 | /data/mysql/instance1 | /tmp/mysql_instance1.sock | /data/mysql/instance1/error.log |
| 2 | 3307 | /data/mysql/instance2 | /tmp/mysql_instance2.sock | /data/mysql/instance2/error.log |
修改mysql配置文件
mysqld_multi的配置文件通常和mysql的默认配置文件是同一个,一般是/etc/my.cnf或者/etc/mysql/my.cnf,需要在配置文件中添加[mysqld_multi]公共配置段,以及每个实例对应的[mysqldN]配置段,N是实例的编号。
以下是完整的配置示例:
[mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin user = multi_admin password = Multi_123456 [mysqld1] port = 3306 datadir = /data/mysql/instance1 socket = /tmp/mysql_instance1.sock pid-file = /data/mysql/instance1/mysql.pid log-error = /data/mysql/instance1/error.log server-id = 1 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci [mysqld2] port = 3307 datadir = /data/mysql/instance2 socket = /tmp/mysql_instance2.sock pid-file = /data/mysql/instance2/mysql.pid log-error = /data/mysql/instance2/error.log server-id = 2 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
注意配置中的mysqld和mysqladmin路径需要根据实际安装路径调整,user和password是用于停止实例的管理账号,后续需要创建该账号。
初始化各个实例的数据目录
配置完成后,需要为每个实例初始化数据目录,mysql8.0使用mysqld --initialize命令完成初始化,执行时需要指定对应实例的配置参数。
初始化第一个实例:
# 创建数据目录并赋予权限 mkdir -p /data/mysql/instance1 chown -R mysql:mysql /data/mysql/instance1 # 初始化实例1 /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql/instance1 --port=3306
初始化第二个实例:
# 创建数据目录并赋予权限 mkdir -p /data/mysql/instance2 chown -R mysql:mysql /data/mysql/instance2 # 初始化实例2 /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql/instance2 --port=3307
初始化完成后,会在对应的错误日志中生成root用户的临时密码,需要记录下来用于首次登录。
启动与停止多实例
初始化完成后就可以通过mysqld_multi启动实例了,常用命令如下:
- 启动所有实例:
mysqld_multi start - 启动指定编号的实例:
mysqld_multi start 1(启动实例1) - 停止所有实例:
mysqld_multi stop - 停止指定编号的实例:
mysqld_multi stop 2(停止实例2) - 查看所有实例运行状态:
mysqld_multi report
启动实例的示例命令:
# 启动实例1和实例2 /usr/local/mysql/bin/mysqld_multi start 1,2 # 查看实例运行状态 /usr/local/mysql/bin/mysqld_multi report
如果启动时提示权限不足,需要检查数据目录和socket文件目录的权限是否属于mysql用户。
创建管理账号用于实例停止
之前配置文件中设置的multi_admin账号需要手动创建,否则停止实例时会失败。分别登录两个实例,创建该账号并赋予对应的权限。
登录实例1并创建账号:
# 登录实例1,使用初始化时的临时密码 /usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql_instance1.sock # 修改root密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123456'; # 创建管理账号 CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'Multi_123456'; GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost'; FLUSH PRIVILEGES;
登录实例2执行相同的操作,注意socket文件路径替换为实例2的对应路径。
验证多实例运行状态
可以通过查看端口监听和登录实例验证是否正常运行:
# 查看端口监听情况 netstat -tlnp | grep mysql # 登录实例2验证 /usr/local/mysql/bin/mysql -u root -p -P 3307 -S /tmp/mysql_instance2.sock
如果看到3306和3307端口都在监听,且能正常登录两个实例,说明多实例配置成功。
常见问题排查
1. 实例启动失败:查看对应实例的错误日志,一般是数据目录权限不足、端口被占用、配置文件参数错误导致。
2. 停止实例失败:检查配置文件中user和password对应的账号是否存在,且是否拥有SHUTDOWN权限,同时检查socket文件路径是否正确。
3. 登录实例提示socket文件不存在:检查实例是否正常启动,或者登录时指定的socket路径是否和配置文件中的一致。
mysql8.0mysqld_multi多实例不同端口启动修改时间:2026-07-02 03:51:38