努力
加油

在阿里云上部署的网站怎么进行数据备份和恢复?

在阿里云上部署网站,数据备份和恢复的核心逻辑其实就两点:“把数据存到别的地方” 和 “知道怎么从那个地方取回来”。

很多新手容易陷入一个误区:觉得买了 ECS(云服务器)就有自动备份了。其实默认情况下,ECS 是不开启自动快照的,除非你手动配置或者购买了特定的云盘服务包。一旦误删代码、被挂马、或者系统崩了,没有备份就是真的丢了。

下面我把目前主流、稳妥的备份方案拆解一下,按重要程度排序:

一、 核心原则:3-2-1 备份法则

不管用哪种工具,先记住这个黄金法则,这是数据安全的底线:

  • 3 份数据副本(一份生产环境,两份备份)。
  • 2 种不同的存储介质(比如本地磁盘 + 对象存储 OSS,或者 服务器快照 + 数据库导出文件)。
  • 1 份异地备份(最好不在同一个可用区,甚至不同地域)。

二、 具体实施路径

1. 应用代码与静态资源备份(最基础)

如果你的网站是纯静态(HTML/CSS/JS)或者基于 Git 管理的动态网站(如 WordPress, Laravel, Spring Boot 等),代码仓库本身就是最好的备份。

  • 操作方式:
    • 确保你的代码托管在 GitLab/GitHub/Gitee 上。
    • 每次上线前提交代码。
    • 注意:不要把配置文件(包含数据库密码、API Key)提交到公共仓库。使用 .env 文件或阿里云 KMS(密钥管理服务)来管理敏感信息。
  • 优点:版本可控,随时可回滚到任意历史版本。
  • 缺点:不包含用户上传的图片、附件、数据库内容。

2. 数据库备份(最关键)

对于大多数网站,数据库里的用户数据、订单、文章内容才是核心价值。

  • 方案 A:RDS 自带备份(推荐)

    • 如果你用的是阿里云 RDS(MySQL/PostgreSQL/SQL Server 等),务必开启自动备份。
    • 在控制台设置备份周期(建议每天一次)和保留时间(建议至少 7 天,重要业务建议 30 天)。
    • 恢复方式:进入 RDS 控制台 -> 备份恢复 -> 选择时间点或备份集 -> 点击“恢复”。它可以恢复到原实例,也可以恢复到新实例。
    • 优势:自动化程度高,无需运维介入,支持按时间点恢复(PITR)。
  • 方案 B:自建 MySQL 备份(如果没用 RDS)

    • 如果数据库跑在 ECS 上,你需要自己写脚本。
    • 常用命令:mysqldump -u root -p database_name > backup.sql
    • 自动化:写一个 Shell 脚本,配合 crontab 定时执行。
    • 存储:生成的 .sql 文件不要留在 ECS 本地!通过 ossutil 命令行工具上传到 OSS,或者通过 rsync 同步到另一台备用服务器。
    • 风险:脚本可能出错,需要监控日志确认备份是否成功。

3. 文件系统与整体系统备份(兜底方案)

当数据库和应用代码都乱了,或者服务器镜像损坏时,需要用到这个。

  • 方案 A:ECS 快照(Snapshot)

    • 是什么:对云盘(系统盘+数据盘)在某一时刻的完整拷贝。
    • 如何开启:
      1. 登录 ECS 控制台。
      2. 找到“快照”菜单。
      3. 创建自动快照策略(例如:每天凌晨 2:00 自动创建快照,保留 15 天)。
    • 恢复方式:
      1. 遇到故障后,基于某个快照创建一块新的云盘。
      2. 将新云盘挂载到一台新的 ECS 实例上。
      3. 启动新实例进行排查和恢复。
    • 注意:快照只备份了磁盘块,不区分文件结构。适合整机灾难恢复,不适合快速提取单个文件。
  • 方案 B:OSS 作为冷备存储

    • 将网站的静态资源(图片、视频)、压缩包、备份好的 SQL 文件全部上传到 OSS。
    • 生命周期管理:设置 OSS 的生命周期规则,将频繁访问的数据转为低频访问或归档存储,降低成本。
    • 跨区域复制:如果预算允许,开启 OSS 的跨区域复制功能,将数据实时同步到另一个地域(如从杭州复制到青岛),实现真正的异地容灾。

三、 实战操作流程示例(以 WordPress 为例)

假设你有一台 ECS 运行着 WordPress,数据库也在同一台 ECS 上。

  1. 代码层:

    • 本地开发,Git 推送至远程仓库。线上服务器通过 git pull 更新代码。
    • 备份重点:wp-content/uploads 目录(用户上传的图片)。
  2. 数据库层:

    • 安装 mydumper(比 mysqldump 更快,支持多线程)。
    • 编写脚本 backup.sh:

      #!/bin/bash
      DATE=$(date +%Y%m%d_%H%M%S)
      BACKUP_DIR="/opt/backups/db"
      OSS_BUCKET="your-bucket-name"
      
      mkdir -p $BACKUP_DIR
      
      # 备份数据库
      mydumper -u root -p 'password' -B wordpress -o $BACKUP_DIR/wp_$DATE
      
      # 压缩
      tar czf $BACKUP_DIR/wp_$DATE.tar.gz $BACKUP_DIR/wp_$DATE
      
      # 上传到 OSS
      ossutil cp $BACKUP_DIR/wp_$DATE.tar.gz oss://$OSS_BUCKET/wp-db-backup/ --acl private
      
      # 清理本地旧文件(可选)
      rm -rf $BACKUP_DIR/wp_$DATE
    • 设置 Crontab:0 2 * * * /path/to/backup.sh
  3. 系统层:

    • 在阿里云控制台为 ECS 系统盘和数据盘创建自动快照策略。
  4. 定期演练(最重要的一步)

    • 很多公司死在这一步:有备份,但没测试过能不能恢复。
    • 建议:每季度找一台新的 ECS,尝试用最新的备份文件搭建一个测试环境。
    • 步骤:
      1. 从 OSS 下载最新的 DB 备份和代码包。
      2. 在新 ECS 上安装 Nginx/Apache + PHP + MySQL。
      3. 导入数据库。
      4. 修改配置文件指向新 IP。
      5. 访问测试域名,验证页面是否正常显示,后台能否登录。

四、 常见坑点提醒

  1. 备份失败无感知:

    • 一定要加监控!比如备份脚本执行完后,发送一条钉钉/企业微信/飞书通知给管理员。如果脚本报错,你能立刻知道。
    • 阿里云云监控可以监控 ECS 的 CPU、内存,但不能直接告诉你“备份是否成功”,需要自定义监控项或依赖脚本日志。
  2. 备份文件太大导致带宽打满:

    • 如果网站很大,全量备份会消耗大量公网带宽。建议使用内网传输(如果备份目标也是阿里云产品,如 OSS 在同一地域,走内网免费且快)。
    • 或者使用增量备份工具(如 Bacula, Duplicati, Restic)。
  3. 勒索病毒攻击:

    • 如果服务器中了勒索病毒,本地的备份可能被加密或删除。
    • 对策:必须有一份不可变的备份。阿里云 OSS 支持“对象锁定”(WORM),开启后在指定时间内无法删除或修改备份文件,能有效防御勒索软件。
  4. 忘记备份非结构化数据:

    • 很多人只备份数据库,忘了备份 /var/www/html 下的插件、主题、上传的图片。这些往往比数据库更难重建。

总结

在阿里云上部署网站,最稳妥的备份组合是:

Git 管理代码 + RDS 自动备份(或自建库+OSS 冷备) + ECS 快照 + OSS 跨区域复制

不要追求“完美备份”,而要追求“可验证的备份”。花半小时做一次恢复演练,胜过十次完美的备份计划。