加油
努力

在ECS实例上怎么配置多个MySQL数据库?

在阿里云 ECS 实例上配置多个 MySQL 数据库,通常有以下几种主流方案,具体选择取决于你的业务需求、资源限制和管理复杂度:


✅ 方案一:单实例多数据库(推荐轻量级场景)

适用场景:

  • 多个应用共享同一台 MySQL 服务
  • 各数据库之间无强隔离需求
  • 资源有限,希望节省成本

实现步骤:

  1. 安装 MySQL(如未安装):

    sudo yum install mysql-server -y   # CentOS/RHEL
    sudo apt install mysql-server -y    # Ubuntu/Debian
  2. 启动并设置开机自启

    sudo systemctl start mysqld
    sudo systemctl enable mysqld
  3. 创建多个数据库和用户

    -- 登录 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;
  4. 连接测试

    mysql -u user1 -p -D db_app1
    mysql -u user2 -p -D db_app2

⚠️ 注意:所有数据库共享同一个 MySQL 进程和资源,性能瓶颈和故障风险共担。


✅ 方案二:使用 Docker 容器部署多个独立 MySQL 实例(推荐中量级场景)

适用场景:

  • 需要逻辑或资源隔离
  • 希望灵活管理不同版本或配置
  • 便于备份、迁移和扩展

实现步骤:

  1. 安装 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
  2. 拉取 MySQL 镜像

    docker pull mysql:8.0
  3. 运行第一个 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
  4. 运行第二个 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
  5. 验证连接

    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 进行编排。欢迎提供具体业务场景,我可以为你定制更详细的配置方案。

云服务器