阿里云Ubuntu如何安装两个mysql?

在阿里云的 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.1mysql -u root -p -S /var/run/mysqld/mysqld2.sock

✅ 常见问题排查

  1. 权限问题:确保 /var/lib/mysql2 所属用户为 mysql
  2. 端口冲突:确认 3307 未被占用
  3. sock 文件路径错误:检查 mysql2.cnf 中的 socket 路径
  4. 日志查看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
  • 不同的 portsocket
  • 独立的 配置文件systemd 服务

适用于多租户、测试环境、开发隔离等场景。

如需更高级方案(如使用 Docker 隔离),也可以考虑容器化部署。

需要我提供 Docker 版本的双 MySQL 实例部署方案 吗?

未经允许不得转载:秒懂云 » 阿里云Ubuntu如何安装两个mysql?