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

服务器

在阿里云的 Ubuntu 服务器上安装两个 MySQL 实例是可行的,但需要注意配置端口、数据目录、socket 文件、配置文件等,避免端口和资源冲突。以下是详细步骤:


✅ 前提条件

  • 你已经有一台阿里云 Ubuntu 服务器(如 Ubuntu 20.04/22.04)
  • 已安装一个 MySQL 实例(默认实例,通常监听 3306 端口)
  • 你有 rootsudo 权限
  • 这里以 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

? 注意:socketpid-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


⚠️ 注意事项

  1. 防火墙:如果需要远程访问,开放 3307 端口(不推荐直接暴露 MySQL)
  2. 资源占用:两个实例会占用更多内存,确保服务器配置足够
  3. 备份策略:分别备份两个实例的数据目录
  4. 监控:建议使用 mysqld_exporter 或阿里云监控分别监控

? 常见问题

  • 权限错误:检查 /var/lib/mysql2 所有者是否为 mysql2
  • 端口冲突:确认 3307 未被占用
  • socket 文件不存在:检查 mysqld 是否成功启动,目录权限
  • 无法连接:检查 bind-address 和防火墙

✅ 总结

通过独立的 datadirportsocket配置文件systemd 服务,可以在同一台 Ubuntu 服务器上安全运行两个 MySQL 实例。

推荐场景:开发测试、多租户应用、主从复制测试等。

如需更多实例,可重复上述流程,修改端口和目录即可。


如需自动化脚本或 Docker 方案,也可以提供。欢迎继续提问!

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