在阿里云上部署网站,数据备份和恢复的核心逻辑其实就两点:“把数据存到别的地方” 和 “知道怎么从那个地方取回来”。
很多新手容易陷入一个误区:觉得买了 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)
- 是什么:对云盘(系统盘+数据盘)在某一时刻的完整拷贝。
- 如何开启:
- 登录 ECS 控制台。
- 找到“快照”菜单。
- 创建自动快照策略(例如:每天凌晨 2:00 自动创建快照,保留 15 天)。
- 恢复方式:
- 遇到故障后,基于某个快照创建一块新的云盘。
- 将新云盘挂载到一台新的 ECS 实例上。
- 启动新实例进行排查和恢复。
- 注意:快照只备份了磁盘块,不区分文件结构。适合整机灾难恢复,不适合快速提取单个文件。
-
方案 B:OSS 作为冷备存储
- 将网站的静态资源(图片、视频)、压缩包、备份好的 SQL 文件全部上传到 OSS。
- 生命周期管理:设置 OSS 的生命周期规则,将频繁访问的数据转为低频访问或归档存储,降低成本。
- 跨区域复制:如果预算允许,开启 OSS 的跨区域复制功能,将数据实时同步到另一个地域(如从杭州复制到青岛),实现真正的异地容灾。
三、 实战操作流程示例(以 WordPress 为例)
假设你有一台 ECS 运行着 WordPress,数据库也在同一台 ECS 上。
-
代码层:
- 本地开发,Git 推送至远程仓库。线上服务器通过
git pull更新代码。 - 备份重点:
wp-content/uploads目录(用户上传的图片)。
- 本地开发,Git 推送至远程仓库。线上服务器通过
-
数据库层:
- 安装
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
- 安装
-
系统层:
- 在阿里云控制台为 ECS 系统盘和数据盘创建自动快照策略。
-
定期演练(最重要的一步)
- 很多公司死在这一步:有备份,但没测试过能不能恢复。
- 建议:每季度找一台新的 ECS,尝试用最新的备份文件搭建一个测试环境。
- 步骤:
- 从 OSS 下载最新的 DB 备份和代码包。
- 在新 ECS 上安装 Nginx/Apache + PHP + MySQL。
- 导入数据库。
- 修改配置文件指向新 IP。
- 访问测试域名,验证页面是否正常显示,后台能否登录。
四、 常见坑点提醒
-
备份失败无感知:
- 一定要加监控!比如备份脚本执行完后,发送一条钉钉/企业微信/飞书通知给管理员。如果脚本报错,你能立刻知道。
- 阿里云云监控可以监控 ECS 的 CPU、内存,但不能直接告诉你“备份是否成功”,需要自定义监控项或依赖脚本日志。
-
备份文件太大导致带宽打满:
- 如果网站很大,全量备份会消耗大量公网带宽。建议使用内网传输(如果备份目标也是阿里云产品,如 OSS 在同一地域,走内网免费且快)。
- 或者使用增量备份工具(如 Bacula, Duplicati, Restic)。
-
勒索病毒攻击:
- 如果服务器中了勒索病毒,本地的备份可能被加密或删除。
- 对策:必须有一份不可变的备份。阿里云 OSS 支持“对象锁定”(WORM),开启后在指定时间内无法删除或修改备份文件,能有效防御勒索软件。
-
忘记备份非结构化数据:
- 很多人只备份数据库,忘了备份
/var/www/html下的插件、主题、上传的图片。这些往往比数据库更难重建。
- 很多人只备份数据库,忘了备份
总结
在阿里云上部署网站,最稳妥的备份组合是:
Git 管理代码 + RDS 自动备份(或自建库+OSS 冷备) + ECS 快照 + OSS 跨区域复制
不要追求“完美备份”,而要追求“可验证的备份”。花半小时做一次恢复演练,胜过十次完美的备份计划。
云技术博客