在宝塔面板上安装两个 MySQL 实例是可行的,但需要注意避免端口冲突、数据目录冲突以及服务管理问题。以下是详细的操作步骤:
✅ 目标:在同一台服务器上运行两个 MySQL 实例(例如:3306 和 3307)
🛠️ 步骤一:安装第一个 MySQL(通过宝塔默认安装)
- 登录宝塔面板。
- 进入「软件商店」。
- 找到 MySQL(建议选择 5.7 或 8.0 版本),点击安装。
- 安装完成后,它会默认监听
3306端口,数据目录为/www/server/data。
✅ 第一个实例已完成,无需额外操作。
🔧 步骤二:手动安装第二个 MySQL 实例
⚠️ 注意:不要通过宝塔再安装一次 MySQL,否则会覆盖或冲突。我们需手动部署第二个实例。
方法:使用 mysqld_multi 或独立 mysqld 配置
这里以 独立配置文件方式 启动第二个 MySQL 实例(推荐)。
1. 创建第二个实例的数据目录和配置文件
# 创建数据目录
mkdir /www/server/data2
chown -R mysql:mysql /www/server/data2
2. 初始化第二个实例的数据
# 使用 mysql_install_db 或 mysqld --initialize
/usr/sbin/mysqld --initialize-insecure
--user=mysql
--basedir=/www/server/mysql
--datadir=/www/server/data2
⚠️
--initialize-insecure:不设置随机密码(方便测试)。生产环境建议用--initialize并记录临时密码。
3. 创建第二个实例的配置文件
新建配置文件:/etc/my3307.cnf
[mysqld]
# 基础设置
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /www/server/data2/mysql.pid
basedir = /www/server/mysql
datadir = /www/server/data2
tmpdir = /tmp
# 日志设置
log-error = /www/server/data2/error.log
slow_query_log = 1
slow_query_log_file = /www/server/data2/slow.log
long_query_time = 2
# 其他必须设置
server-id = 2
skip-locking
skip-name-resolve
lower_case_table_names = 1
# 避免与 3306 冲突
gtid-mode = OFF
log-bin = mysql-bin
binlog-format = ROW
# 可选:关闭不必要的功能
performance_schema = OFF
innodb_buffer_pool_size = 128M
💡 确保所有路径唯一,尤其是 socket、pid、log、datadir。
4. 启动第二个 MySQL 实例
# 启动命令
/usr/sbin/mysqld --defaults-file=/etc/my3307.cnf &
检查是否启动成功:
ps aux | grep mysqld
netstat -tlnp | grep 3307
5. 设置开机自启(可选)
编辑 /etc/rc.d/rc.local 或使用 systemd。
方式 A:添加到 rc.local(简单)
echo "/usr/sbin/mysqld --defaults-file=/etc/my3307.cnf &" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
方式 B:创建 systemd 服务(推荐)
创建服务文件:
vim /etc/systemd/system/mysql3307.service
内容如下:
[Unit]
Description=MySQL 3307 Instance
After=network.target
[Service]
Type=simple
User=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3307.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用服务:
systemctl daemon-reexec
systemctl enable mysql3307
systemctl start mysql3307
6. 设置 root 密码(如果初始化时未设)
连接到 3307 实例:
mysql -u root -S /tmp/mysql3307.sock
然后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
🌐 步骤三:宝塔中如何管理?
⚠️ 宝塔只能管理默认的 3306 实例。
✅ 第二个实例(3307)需手动管理,但可通过以下方式增强可用性:
-
使用 phpMyAdmin 添加第二个实例:
- 宝塔 → 软件商店 → phpMyAdmin → 设置 → 允许远程登录
- 在登录页选择“服务器”,输入
127.0.0.1:3307,用 root 登录
-
使用 Navicat、DBeaver 等工具直接连接
127.0.0.1:3307
⚠️ 注意事项
| 项目 | 说明 |
|---|---|
| 端口 | 不能重复(3306 和 3307) |
| 数据目录 | 必须分开(如 data 和 data2) |
| Socket 文件 | 不同(如 /tmp/mysql.sock vs /tmp/mysql3307.sock) |
| 配置文件 | 使用 --defaults-file 指定 |
| 内存占用 | 两个实例会增加内存消耗,注意服务器配置 |
✅ 总结
| 操作 | 是否通过宝塔 |
|---|---|
| 第一个 MySQL (3306) | ✅ 是(直接安装) |
| 第二个 MySQL (3307) | ❌ 否(手动部署) |
| 管理方式 | 手动或外部工具(如 phpMyAdmin) |
如果你希望完全可视化管理,也可以考虑使用 Docker 部署第二个 MySQL,这样更安全隔离:
docker run -d --name mysql2
-p 3307:3306
-e MYSQL_ROOT_PASSWORD=yourpassword
-v /opt/mysql2:/var/lib/mysql
mysql:5.7
然后宝塔不变,Docker 管理第二个实例。
如有需要,我可以提供 Docker + 宝塔共存方案。欢迎继续提问!
云计算HECS