在阿里云的 Ubuntu 服务器上安装两个 MySQL 实例是完全可行的,通常用于开发、测试或隔离不同应用的数据库服务。以下是详细步骤,教你如何在同一台 Ubuntu 服务器上安装并运行两个独立的 MySQL 实例。
🚀 目标
- 安装一个 MySQL(主实例,使用默认端口 3306)
- 配置第二个 MySQL 实例(使用不同端口,如 3307)
- 两个实例独立运行,互不干扰
✅ 步骤 1:更新系统并安装 MySQL
sudo apt update
sudo apt install mysql-server -y
安装完成后,主实例会默认监听 3306 端口。
运行安全设置:
sudo mysql_secure_installation
✅ 步骤 2:为第二个实例准备目录和配置
1. 创建第二个实例的数据目录
sudo mkdir -p /var/lib/mysql2
sudo chown -R mysql:mysql /var/lib/mysql2
2. 初始化第二个实例的数据目录
sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql2 --basedir=/usr
记住输出中的临时 root 密码(用于首次登录)。
✅ 步骤 3:创建第二个实例的配置文件
创建配置文件 /etc/mysql/mysql2.cnf:
sudo nano /etc/mysql/mysql2.cnf
内容如下:
[mysqld]
# 唯一实例名称
port = 3307
socket = /var/run/mysqld/mysqld2.sock
pid-file = /var/run/mysqld/mysqld2.pid
datadir = /var/lib/mysql2
log-error = /var/log/mysql/mysql2.err
server-id = 2
# 避免与默认实例冲突
port = 3307
bind-address = 127.0.0.1
# 可选:设置不同的临时目录
tmpdir = /tmp/mysql2
保存退出。
✅ 步骤 4:创建 systemd 服务文件
复制默认的 MySQL 服务文件并修改:
sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/mysql2.service
编辑新服务文件:
sudo nano /etc/systemd/system/mysql2.service
修改以下关键部分:
[Unit]
Description=MySQL Second Instance
After=network.target
After=mysql.service
Conflicts=mysql.service
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql2.cnf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
TimeoutSec=0
Type=notify
TimeoutStartSec=100
TimeoutStopSec=60
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意:
--defaults-file指向你创建的mysql2.cnf
✅ 步骤 5:重载 systemd 并启动第二个实例
sudo systemctl daemon-reload
sudo systemctl start mysql2
设置开机自启(可选):
sudo systemctl enable mysql2
检查状态:
sudo systemctl status mysql2
✅ 步骤 6:登录并设置第二个实例
使用临时密码登录:
sudo cat /var/log/mysql/mysql2.err | grep 'temporary password'
然后连接:
mysql -u root -p -S /var/run/mysqld/mysqld2.sock
或通过端口连接(确保配置了 port):
mysql -u root -p -h 127.0.0.1 -P 3307
进入后修改密码并完成安全设置:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
✅ 步骤 7:防火墙设置(如需远程访问)
如果你希望从外部连接第二个实例(不推荐生产环境直接暴露),可开放端口:
sudo ufw allow 3307
⚠️ 注意:阿里云还需在 安全组 中放行
3307端口。
✅ 连接方式总结
| 实例 | 连接方式 |
|---|---|
| 主实例(3306) | mysql -u root -p |
| 第二实例(3307) | mysql -u root -p -P 3307 -h 127.0.0.1 或 mysql -u root -p -S /var/run/mysqld/mysqld2.sock |
✅ 常见问题排查
- 权限问题:确保
/var/lib/mysql2所属用户为mysql - 端口冲突:确认 3307 未被占用
- sock 文件路径错误:检查
mysql2.cnf中的 socket 路径 - 日志查看:
sudo tail -f /var/log/mysql/mysql2.err
✅ 卸载或停止第二个实例
sudo systemctl stop mysql2
sudo systemctl disable mysql2
# 如需彻底删除
sudo rm -rf /var/lib/mysql2
sudo rm /etc/systemd/system/mysql2.service
sudo systemctl daemon-reload
✅ 总结
通过以上步骤,你可以在阿里云 Ubuntu 服务器上成功运行两个独立的 MySQL 实例。关键点是:
- 不同的
datadir - 不同的
port和socket - 独立的
配置文件和systemd 服务
适用于多租户、测试环境、开发隔离等场景。
如需更高级方案(如使用 Docker 隔离),也可以考虑容器化部署。
需要我提供 Docker 版本的双 MySQL 实例部署方案 吗?
秒懂云