在阿里云的 Ubuntu 服务器上安装两个 MySQL 实例是可行的,但需要注意配置端口、数据目录、socket 文件、配置文件等,避免端口和资源冲突。以下是详细步骤:
✅ 前提条件
- 你已经有一台阿里云 Ubuntu 服务器(如 Ubuntu 20.04/22.04)
- 已安装一个 MySQL 实例(默认实例,通常监听 3306 端口)
- 你有
root或sudo权限 - 这里以 MySQL 8.0 为例
? 目标
安装第二个 MySQL 实例,运行在 3307 端口,使用独立的数据目录和配置。
? 步骤一:安装第一个 MySQL(如果尚未安装)
sudo apt update
sudo apt install mysql-server -y
启动并设置开机自启:
sudo systemctl start mysql
sudo systemctl enable mysql
运行安全配置(可选):
sudo mysql_secure_installation
? 步骤二:为第二个实例创建目录和用户
# 创建数据目录
sudo mkdir -p /var/lib/mysql2
# 创建日志目录
sudo mkdir -p /var/log/mysql2
# 创建配置目录(可选)
sudo mkdir -p /etc/mysql2
# 创建 mysql 用户组(通常已存在)
sudo groupadd mysql2 || true
sudo useradd -r -g mysql2 -s /bin/false mysql2
# 设置权限
sudo chown -R mysql2:mysql2 /var/lib/mysql2 /var/log/mysql2 /etc/mysql2
sudo chmod 755 /var/lib/mysql2 /var/log/mysql2
? 步骤三:初始化第二个实例的数据目录
sudo mysqld --initialize
--user=mysql2
--basedir=/usr
--datadir=/var/lib/mysql2
--log-error=/var/log/mysql2/error.log
⚠️ 注意:初始化后会生成一个临时密码,查看日志获取:
sudo cat /var/log/mysql2/error.log | grep 'temporary password'
? 步骤四:创建第二个实例的配置文件
创建 /etc/mysql2/my.cnf:
[mysqld]
# 基本设置
user = mysql2
port = 3307
socket = /var/run/mysqld/mysqld2.sock
pid-file = /var/run/mysqld/mysqld2.pid
datadir = /var/lib/mysql2
log-error = /var/log/mysql2/error.log
basedir = /usr
# 唯一 server-id(主从复制时需要)
server-id = 2
# 避免与第一个实例冲突
tmpdir = /tmp/mysql2
secure-file-priv= NULL
# 可选:禁用 DNS 解析
skip-name-resolve
# 可选:关闭二进制日志(除非需要复制)
# log-bin = mysql-bin
# 避免端口冲突
bind-address = 127.0.0.1
# InnoDB 设置(可选)
innodb_data_home_dir = /var/lib/mysql2
innodb_log_group_home_dir = /var/lib/mysql2
? 注意:
socket和pid-file路径要唯一,避免与默认实例冲突。
? 步骤五:创建 socket 目录
sudo mkdir -p /var/run/mysqld
sudo chown mysql2:mysql2 /var/run/mysqld
? 步骤六:创建 systemd 服务文件
创建服务文件 /etc/systemd/system/mysql2.service:
[Unit]
Description=MySQL Second Instance
After=network.target
After=mysql.service
DependsOn=mysql.service
[Service]
Type=simple
User=mysql2
Group=mysql2
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql2/my.cnf
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql2/my.cnf -u root -p shutdown
Restart=always
RestartSec=5
# 文件权限
LimitNOFILE=65536
PrivateTmp=true
[Install]
WantedBy=multi-user.target
? 注意:
ExecStop中的-p表示会提示输入密码。你也可以使用.my.cnf配置文件避免交互。
? 步骤七:启动第二个 MySQL 实例
# 重载 systemd
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start mysql2
# 设置开机自启
sudo systemctl enable mysql2
# 查看状态
sudo systemctl status mysql2
? 步骤八:连接并设置密码
使用 socket 或 TCP 连接:
# 使用 socket(推荐)
sudo mysql -S /var/run/mysqld/mysqld2.sock -u root -p
# 或使用 TCP(端口 3307)
mysql -h 127.0.0.1 -P 3307 -u root -p
进入后修改 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
✅ 验证两个实例是否正常运行
# 查看端口
sudo netstat -tulnp | grep :330
# 应该看到:
# 3306(默认实例)
# 3307(第二个实例)
? 可选:创建客户端快捷方式
编辑 ~/.bashrc 添加别名:
alias mysql2='mysql -S /var/run/mysqld/mysqld2.sock -u root -p'
然后 source ~/.bashrc
⚠️ 注意事项
- 防火墙:如果需要远程访问,开放 3307 端口(不推荐直接暴露 MySQL)
- 资源占用:两个实例会占用更多内存,确保服务器配置足够
- 备份策略:分别备份两个实例的数据目录
- 监控:建议使用
mysqld_exporter或阿里云监控分别监控
? 常见问题
- 权限错误:检查
/var/lib/mysql2所有者是否为mysql2 - 端口冲突:确认 3307 未被占用
- socket 文件不存在:检查
mysqld是否成功启动,目录权限 - 无法连接:检查
bind-address和防火墙
✅ 总结
通过独立的 datadir、port、socket、配置文件 和 systemd 服务,可以在同一台 Ubuntu 服务器上安全运行两个 MySQL 实例。
推荐场景:开发测试、多租户应用、主从复制测试等。
如需更多实例,可重复上述流程,修改端口和目录即可。
如需自动化脚本或 Docker 方案,也可以提供。欢迎继续提问!
CDNK博客