在阿里云服务器上部署两个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
性能优化建议
- 资源配置:确保服务器有足够内存(每个MySQL实例建议至少1GB)
- 存储分离:将数据目录放在SSD磁盘上
- 监控设置:配置监控告警
- 定期备份:设置自动备份策略
常见问题解决
- 端口冲突:确保端口3306和3307未被占用
- 权限问题:检查数据目录的mysql用户权限
- 连接失败:检查防火墙和安全组设置
- 内存不足:调整MySQL配置参数,降低内存使用
选择哪种方式取决于你的需求:
- 方法一:适合生产环境,性能更好
- 方法二:适合快速部署和测试,易于管理
建议在生产环境使用方法一,并做好定期备份和监控。
CLOUD技术笔记