在阿里云 ECS 实例上配置多个 MySQL 数据库,通常有以下几种主流方案,具体选择取决于你的业务需求、资源限制和管理复杂度:
✅ 方案一:单实例多数据库(推荐轻量级场景)
适用场景:
- 多个应用共享同一台 MySQL 服务
- 各数据库之间无强隔离需求
- 资源有限,希望节省成本
实现步骤:
-
安装 MySQL(如未安装):
sudo yum install mysql-server -y # CentOS/RHEL sudo apt install mysql-server -y # Ubuntu/Debian -
启动并设置开机自启:
sudo systemctl start mysqld sudo systemctl enable mysqld -
创建多个数据库和用户:
-- 登录 MySQL mysql -u root -p -- 创建数据库 CREATE DATABASE db_app1; CREATE DATABASE db_app2; -- 创建用户并授权 CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1'; GRANT ALL PRIVILEGES ON db_app1.* TO 'user1'@'localhost'; CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password2'; GRANT ALL PRIVILEGES ON db_app2.* TO 'user2'@'localhost'; FLUSH PRIVILEGES; -
连接测试:
mysql -u user1 -p -D db_app1 mysql -u user2 -p -D db_app2
⚠️ 注意:所有数据库共享同一个 MySQL 进程和资源,性能瓶颈和故障风险共担。
✅ 方案二:使用 Docker 容器部署多个独立 MySQL 实例(推荐中量级场景)
适用场景:
- 需要逻辑或资源隔离
- 希望灵活管理不同版本或配置
- 便于备份、迁移和扩展
实现步骤:
-
安装 Docker:
sudo yum install docker-ce docker-ce-cli containerd.io -y # CentOS sudo apt install docker.io -y # Ubuntu sudo systemctl start docker sudo systemctl enable docker -
拉取 MySQL 镜像:
docker pull mysql:8.0 -
运行第一个 MySQL 实例:
docker run -d --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rootpass1 -e MYSQL_DATABASE=db_app1 -v /data/mysql1:/var/lib/mysql mysql:8.0 -
运行第二个 MySQL 实例(使用不同端口和数据卷):
docker run -d --name mysql2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=rootpass2 -e MYSQL_DATABASE=db_app2 -v /data/mysql2:/var/lib/mysql mysql:8.0 -
验证连接:
mysql -h 127.0.0.1 -P 3306 -u root -prootpass1 db_app1 mysql -h 127.0.0.1 -P 3307 -u root -prootpass2 db_app2
💡 可通过
docker-compose.yml统一管理多个实例,便于维护。
✅ 方案三:使用云数据库 RDS + 自建 MySQL 混合架构(推荐生产环境)
- 将核心业务数据放在 阿里云 RDS MySQL(高可用、自动备份、监控完善)
- 在非核心或开发测试场景,在 ECS 上自建多个 MySQL 实例(Docker 或原生)
✅ 方案四:MySQL 多实例(Multi-Instance)—— 高级玩法
通过同一套 MySQL 软件,配置多个 mysqld 进程,每个实例监听不同端口,拥有独立的数据目录、配置文件和日志。
示例结构:
/etc/my.cnf.d/
├── my1.cnf → port=3306, datadir=/var/lib/mysql1
├── my2.cnf → port=3307, datadir=/var/lib/mysql2
└── my3.cnf → port=3308, datadir=/var/lib/mysql3
需为每个实例初始化数据目录:
mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/var/lib/mysql1
mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/var/lib/mysql2
然后分别启动:
mysqld --defaults-file=/etc/my.cnf.d/my1.cnf &
mysqld --defaults-file=/etc/my.cnf.d/my2.cnf &
⚠️ 此方案运维复杂,适合熟悉 MySQL 内部机制的工程师。
📌 最佳实践建议
| 场景 | 推荐方案 |
|---|---|
| 个人项目 / 测试环境 | 方案一(单实例多库) |
| 中小型企业 / 多应用隔离 | 方案二(Docker 多实例) |
| 高可用 / 生产关键业务 | 方案三(RDS + 自建混合) |
| 高性能 / 精细控制 | 方案四(MySQL 多实例) |
🔒 安全注意事项
- 始终为每个数据库设置独立用户和密码
- 禁用远程 root 登录(仅允许 localhost 或特定 IP)
- 定期备份数据库(可使用
mysqldump或云备份工具) - 启用防火墙规则,仅开放必要端口(如 3306/3307)
如需进一步自动化管理,可结合 Ansible、Terraform 或 Kubernetes 进行编排。欢迎提供具体业务场景,我可以为你定制更详细的配置方案。
云小栈