如何在阿里云服务器上部署两个MySQL数据库?

在阿里云服务器上部署两个MySQL数据库,可以通过以下两种主要方式实现:

方法一:使用不同端口运行多个MySQL实例(推荐)

1. 安装MySQL

# 安装MySQL(以CentOS为例)
sudo yum install -y mysql-server

# 启动并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld

2. 配置第二个MySQL实例

# 复制MySQL配置文件
sudo cp /etc/my.cnf /etc/my2.cnf

# 复制数据目录
sudo cp -r /var/lib/mysql /var/lib/mysql2
sudo chown -R mysql:mysql /var/lib/mysql2

3. 修改第二个实例配置

编辑 /etc/my2.cnf

[mysqld]
# 使用不同端口
port = 3307
socket = /var/lib/mysql2/mysql.sock

# 数据目录
datadir = /var/lib/mysql2

# 进程文件
pid-file = /var/run/mysqld/mysqld2.pid

# 日志文件
log-error = /var/log/mysqld2.log

# 避免与第一个实例冲突
server-id = 2

4. 初始化第二个实例

# 初始化数据库
sudo mysqld --defaults-file=/etc/my2.cnf --initialize --user=mysql

# 查看临时密码
sudo grep 'temporary password' /var/log/mysqld2.log

5. 创建启动脚本

创建 /etc/systemd/system/mysqld2.service

[Unit]
Description=MySQL Server 2
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my2.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target

6. 启动第二个实例

# 重新加载systemd
sudo systemctl daemon-reload

# 启动第二个MySQL实例
sudo systemctl start mysqld2
sudo systemctl enable mysqld2

# 检查状态
sudo systemctl status mysqld2

方法二:使用Docker部署(更简单)

1. 安装Docker

# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

2. 部署两个MySQL容器

# 创建数据目录
sudo mkdir -p /data/mysql/{3306,3307}

# 运行第一个MySQL实例(端口3306)
docker run -d 
  --name mysql-3306 
  -p 3306:3306 
  -e MYSQL_ROOT_PASSWORD=your_password1 
  -v /data/mysql/3306:/var/lib/mysql 
  mysql:8.0

# 运行第二个MySQL实例(端口3307)
docker run -d 
  --name mysql-3307 
  -p 3307:3306 
  -e MYSQL_ROOT_PASSWORD=your_password2 
  -v /data/mysql/3307:/var/lib/mysql 
  mysql:8.0

3. 验证部署

# 查看运行中的容器
docker ps

# 测试连接
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -h 127.0.0.1 -P 3307 -u root -p

安全配置建议

1. 防火墙设置

# 开放端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --zone=public --add-port=3307/tcp --permanent
sudo firewall-cmd --reload

2. 安全组配置(阿里云控制台)

  • 登录阿里云ECS控制台
  • 找到实例安全组
  • 添加入方向规则:
    • 端口范围:3306/3307
    • 授权对象:建议限制为特定IP

3. MySQL安全设置

-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassword123!';

-- 创建专用用户(每个实例)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'UserPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 禁止远程root登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');

管理命令汇总

# 查看实例状态
sudo systemctl status mysqld
sudo systemctl status mysqld2

# 查看日志
sudo tail -f /var/log/mysqld.log
sudo tail -f /var/log/mysqld2.log

# 重启实例
sudo systemctl restart mysqld
sudo systemctl restart mysqld2

# Docker管理命令
docker logs mysql-3306
docker restart mysql-3307

性能优化建议

  1. 资源配置:确保服务器有足够内存(每个MySQL实例建议至少1GB)
  2. 存储分离:将数据目录放在SSD磁盘上
  3. 监控设置:配置监控告警
  4. 定期备份:设置自动备份策略

常见问题解决

  1. 端口冲突:确保端口3306和3307未被占用
  2. 权限问题:检查数据目录的mysql用户权限
  3. 连接失败:检查防火墙和安全组设置
  4. 内存不足:调整MySQL配置参数,降低内存使用

选择哪种方式取决于你的需求:

  • 方法一:适合生产环境,性能更好
  • 方法二:适合快速部署和测试,易于管理

建议在生产环境使用方法一,并做好定期备份和监控。

云服务器