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

在阿里云的 Ubuntu 服务器上安装两个 MySQL 实例是可行的,但需要进行一些配置以避免端口冲突、数据目录冲突和进程管理问题。以下是详细步骤:


✅ 目标

在同一台 Ubuntu 服务器上运行 两个独立的 MySQL 实例,例如:

  • 实例1:默认端口 3306(主实例)
  • 实例2:自定义端口 3307(副实例)

📌 前提条件

  • 已登录阿里云 ECS 实例(Ubuntu 系统)
  • 具备 root 或 sudo 权限
  • 已安装一个 MySQL(可选,也可以从零开始装两个)

🔧 步骤一:安装第一个 MySQL(默认实例)

如果你还没有安装任何 MySQL,先安装第一个:

sudo apt update
sudo apt install mysql-server -y

启动并设置开机自启:

sudo systemctl start mysql
sudo systemctl enable mysql

运行安全初始化(可选):

sudo mysql_secure_installation

这个实例使用默认配置:端口 3306,数据目录 /var/lib/mysql,配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf


🚀 步骤二:创建第二个 MySQL 实例

1. 创建新的数据目录和日志目录

sudo mkdir -p /var/lib/mysql2
sudo mkdir -p /var/log/mysql2
sudo chown -R mysql:mysql /var/lib/mysql2 /var/log/mysql2

2. 初始化第二个实例的数据目录

sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql2 --basedir=/usr

记住生成的临时 root 密码(在日志中),后续登录要用。


3. 创建第二个实例的配置文件

新建配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld2.cnf

写入以下内容:

[mysqld]
# 基本设置
user            = mysql
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
server-id       = 2

# 避免与第一个实例冲突
skip-networking = 0
bind-address    = 127.0.0.1

# 可选:不同端口的 performance schema 端口等(如果需要)
performance_schema_port = 33071

保存退出。


4. 创建 systemd 服务文件(用于管理第二个实例)

sudo cp /lib/systemd/system/mysql.service /lib/systemd/system/mysql2.service

编辑新服务文件:

sudo nano /lib/systemd/system/mysql2.service

修改以下关键字段:

[Unit]
Description=MySQL Second Instance
After=network.target
After=syslog.target
Conflicts=mysql.service  # 避免冲突

[Service]
User=mysql
Group=mysql
ExecStartPre=/bin/mkdir -p /var/run/mysqld
ExecStartPre=/bin/chown mysql:mysql /var/run/mysqld
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql.conf.d/mysqld2.cnf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
TimeoutSec=60
Restart=on-failure
RestartPreventExitStatus=1
Type=notify

注意:--defaults-file 指向我们刚创建的 mysqld2.cnf


5. 重新加载 systemd 并启动第二个实例

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start mysql2

设置开机自启:

sudo systemctl enable mysql2

检查状态:

sudo systemctl status mysql2

🔐 步骤三:为第二个实例设置密码

使用临时密码登录(查看日志获取):

sudo grep 'temporary password' /var/log/mysql2/error.log

然后登录:

mysql -u root -p -h 127.0.0.1 -P 3307 --protocol=tcp

必须用 -h 127.0.0.1--protocol=tcp 才能通过 TCP 连接到 3307 端口(否则会尝试 socket)

首次登录后修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword';
FLUSH PRIVILEGES;
EXIT;

🔍 测试连接

测试第一个实例:

mysql -u root -p -h 127.0.0.1 -P 3306

测试第二个实例:

mysql -u root -p -h 127.0.0.1 -P 3307

⚠️ 安全与网络注意事项(阿里云 ECS)

  1. 安全组规则

    • 如果你希望外部访问,需在阿里云控制台开放 33063307 端口(建议仅对特定 IP 开放)
    • 生产环境不建议直接暴露 MySQL 端口,可通过 SSH 隧道或跳板机访问
  2. 防火墙(UFW)

    sudo ufw allow from 192.168.1.100 to any port 3306,3307

🛠️ 常见问题排查

问题 解决方法
启动失败,权限错误 检查 /var/lib/mysql2 所有者是否为 mysql
端口被占用 使用 netstat -tulnp | grep 3307 查看
socket 文件路径冲突 确保每个实例的 socket 路径唯一
配置文件未加载 检查 --defaults-file 路径是否正确

✅ 总结

你现在拥有两个独立运行的 MySQL 实例:

实例 端口 数据目录 配置文件 服务名
第一个 3306 /var/lib/mysql /etc/mysql/mysql.conf.d/mysqld.cnf mysql
第二个 3307 /var/lib/mysql2 /etc/mysql/mysql.conf.d/mysqld2.cnf mysql2

如需更多实例,可复制此流程,注意每次更换端口、目录、socket、服务名。

如有需要,我也可以提供一键部署脚本。欢迎继续提问!

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