You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS上实现应用分区 将应用与数据库分离至不同EC2实例

AWS EC2应用与数据库分层部署操作流程(基于Amazon Linux 2 AMI)

流程基于你已在单台Amazon Linux 2实例上完成LAMP环境、AJAX业务逻辑、初始数据库搭建的现状,拆分独立应用实例、专用数据库实例的操作按以下顺序执行即可。

1. 前置数据备份(必做,避免操作失误丢数据)

  • 备份应用代码:登录现有单实例,执行命令打包web根目录(默认路径为/var/www/html,有自定义路径替换成实际路径即可):
    sudo tar -zcf app_code_backup.tar.gz /var/www/html
    打包完成后将压缩包下载到本地,或上传到临时存储位置留存。
  • 备份数据库数据:执行mysqldump命令全量导出业务库:
    mysqldump -u 你的数据库管理员账号 -p 你的业务库名 > db_full_backup.sql
    按提示输入密码完成导出,同样将sql备份文件留存到安全位置。
  • 记录现有环境配置:把当前实例的PHP版本、Apache自定义配置、应用内的数据库连接参数、已安装的PHP扩展列表全部记到本地,后续新实例配置要保持版本一致,避免兼容问题。

2. 配置专用数据库EC2实例

  • 新建EC2实例,镜像选择和现有环境一致的Amazon Linux 2 AMI,实例规格按数据库负载选择,建议数据盘单独挂载gp3类型EBS,不要和系统盘混用,避免IO抢占。实例和后续要建的应用实例必须放在同一个VPC下,建议同可用区降低网络延迟。数据库实例可以不分配公网IP,所有访问走VPC私有网络即可。
  • 配置数据库实例的安全组入站规则,仅放开必要端口:
    • 22端口(SSH运维):仅允许你的固定运维IP访问
    • 3306端口(MySQL/MariaDB默认端口):源直接选择后续应用实例要绑定的安全组,不要写0.0.0.0/0公网放行,也尽量不要写死固定IP,后续应用扩容更灵活
  • SSH登录到新的数据库实例,仅安装数据库服务,不需要部署Apache/PHP等应用层组件:
    # 更新系统源
    sudo yum update -y
    # 安装和原实例版本一致的数据库(原实例用MySQL就换对应源安装,保持大版本一致)
    sudo amazon-linux-extras install mariadb10.5 -y
    # 启动服务并设置开机自启
    sudo systemctl start mariadb
    sudo systemctl enable mariadb
    
  • 执行数据库安全初始化:运行sudo mysql_secure_installation,按交互提示设置root强密码、删除匿名用户、禁用root远程登录、删除默认测试库、刷新权限表。
  • 修改数据库监听配置:编辑配置文件sudo vi /etc/my.cnf.d/mariadb-server.cnf,把bind-address参数从默认的127.0.0.1改为0.0.0.0,保存退出后重启数据库服务sudo systemctl restart mariadb。
  • 创建业务专用数据库账号,禁止直接用root账号给业务连接使用:登录数据库执行以下SQL,把占位符替换成实际值:
    -- 允许应用安全组内的服务器用app_user账号连接
    CREATE USER 'app_user'@'%' IDENTIFIED BY '你的业务账号强密码';
    GRANT ALL PRIVILEGES ON 你的业务库名.* TO 'app_user'@'%';
    FLUSH PRIVILEGES;
    exit;
    
  • 把之前备份的db_full_backup.sql上传到数据库实例,执行导入命令:
    mysql -u root -p 你的业务库名 < db_full_backup.sql
    导入完成后登录数据库,抽查核心表数据确认导入完整。

3. 配置独立应用EC2实例

  • 新建EC2实例,同样选择Amazon Linux 2 AMI,规格按应用访问量选择,给实例绑定弹性IP(避免重启后公网IP变动),安全组入站规则配置:
    • 22端口:仅允许你的固定运维IP访问
    • 80/443端口:允许公网0.0.0.0/0访问,用于对外提供web服务
    • 注意:应用实例不需要对外放开3306端口
  • SSH登录到新的应用实例,安装应用层运行环境,不需要安装本地数据库服务:
    # 更新系统源
    sudo yum update -y
    # 安装和原实例版本一致的PHP、Apache、必要PHP扩展
    sudo amazon-linux-extras install php7.4 -y # 替换成你原环境的PHP版本
    sudo yum install httpd php-mysqlnd php-gd php-mbstring php-xml -y # 扩展按你原环境实际安装的补全
    # 启动Apache并设置开机自启
    sudo systemctl start httpd
    sudo systemctl enable httpd
    
  • 把之前备份的app_code_backup.tar.gz上传到应用实例,解压到web根目录:
    sudo tar -zxf app_code_backup.tar.gz -C /var/www/html/
    执行权限修正,确保Apache进程有目录读写权限:sudo chown -R apache:apache /var/www/html
  • 同步原实例的Apache虚拟主机配置、伪静态规则、PHP.ini自定义配置到新实例,配置完成后重启Apache服务。
  • 修改应用代码里的数据库连接配置:把原来的数据库地址localhost/127.0.0.1替换为数据库实例的私有IP,数据库账号密码替换为之前创建的app_user对应的账号密码,保存配置。

4. 连通性验证与流量切换

  • 先在应用实例上测试数据库连通性:执行mysql -h 数据库实例私有IP -u app_user -p,输入密码后能正常登录,说明网络、权限配置正常。
  • 本地通过修改hosts文件,把业务域名指向新应用实例的公网IP,逐页测试业务功能:静态资源加载、AJAX接口请求、数据提交查询、文件上传等核心流程全部跑通,确认无5xx/4xx报错、无数据库连接异常。
  • 测试无误后,到域名解析后台把业务域名的A记录正式指向新应用实例绑定的弹性IP,等待解析生效。
  • 持续观察24小时应用访问日志、数据库慢查询日志、服务器负载指标,确认业务运行无异常后,可将原单实例停机做快照备份,确认无回滚需求后即可终止原实例。

5. 后续运维注意事项

  • 数据库实例不要开通公网访问,所有数据交互走VPC私有网络,降低攻击风险
  • 给两个实例配置定期快照策略,数据库快照频率建议高于应用实例,避免数据丢失
  • 后续如果要扩容应用层,新增的应用实例只要绑定同一个应用安全组,就自动具备数据库访问权限,不需要修改数据库侧配置

内容的提问来源于stack exchange,提问作者Nir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:09:10