阿里智能云 阿里智能云 立即咨询

阿里云大额充值优惠 阿里云服务器全备份流程

阿里云国际 / 2026-04-17 13:41:59

你有没有过这种深夜惊魂时刻?

凌晨两点,线上服务突然502,紧急登录控制台一看——数据库表被误删,且没开回收站。你冷汗涔涔点开备份列表,发现:快照是上周三的,RDS自动备份保留7天但恰好卡在周四凌晨失效,OSS里存的备份脚本还停留在三个月前……你盯着屏幕,手指悬在回车键上,仿佛听见了职业寿命倒计时的滴答声。

别慌。这不是玄学,是备份姿势不对。

今天不聊虚的“高可用架构”“灾备三级体系”,就用一台杭州区的4核8G ECS(CentOS 7.9 + MySQL 5.7 + Nginx)当靶子,带你把阿里云服务器全备份从玄学变成肌肉记忆。全程无截图、无SDK代码堆砌,只讲人话、踩过的坑、和能直接粘贴执行的命令。

一、先泼冷水:什么叫“全备份”?不是点一下“创建快照”就完事了

阿里云大额充值优惠 很多人的“全备份”=给系统盘打个快照。这相当于只给汽车拍张外观照,却忘了油箱没油、备胎漏气、行车记录仪内存已满。

真正的全备份必须覆盖四层:

  • 系统层:ECS实例配置(安全组、VPC、弹性公网IP绑定状态)+ 系统盘数据(/etc /usr/local /boot等)
  • 数据层:RDS实例(含参数组、白名单、备份策略)、自建MySQL/Redis数据文件
  • 应用层:Nginx配置、PHP-FPM设置、业务代码(含.git目录!很多人备份代码却忽略版本历史)
  • 元数据层:DNS解析记录、SSL证书(含私钥!)、监控告警规则(别等恢复后手动重配37条报警)

漏掉任何一层,都可能让你在恢复时陷入“我明明备份了,为啥还是挂了”的哲学困境。

二、动手!五步落地全备份流水线

Step 1:系统盘快照 → 不是“点即备份”,而是“定时+标签+保留”铁三角

错误示范:
每天手动点控制台→选“系统盘”→点“创建快照”→不填描述→不管保留时间。

正确姿势:
登录ECS控制台→左侧菜单“存储与快照”→“快照策略”→新建策略:
• 执行时间:建议设为凌晨2:30(避开业务高峰,且比RDS备份晚30分钟,防止数据库锁表冲突)
• 应用对象:勾选“自动应用到指定云盘”,选择你的系统盘ID
• 保留规则:保留最近7个自动快照 + 手动快照永久保留(关键上线前务必手动打一个带“v2.3.0-release”标签的)
• 标签:必填!例如env:prod, role:web, backup:full——后续用CLI批量查询全靠它。

⚠️ 血泪教训:某次大促前,运维小哥按习惯打了快照,但忘了改标签。故障恢复时用aliyun ecs DescribeSnapshots --Tag.1.Key env --Tag.1.Value test查了一圈,发现全是测试环境快照……

Step 2:数据层双保险 → RDS自动备份 + 自建库逻辑备份

RDS本身有自动备份,但注意:
• 自动备份是物理备份,恢复粒度最小到“实例级”,无法单表恢复;
• 备份文件存在OSS,但默认不开放下载权限(得进RDS控制台手动导出);
• 跨地域容灾需额外开通“跨地域备份”功能(按量付费,别等主地域炸了才想起这事)。

所以必须加一道逻辑备份:用mysqldump导出SQL,压缩后传OSS。

写个/root/scripts/backup_db.sh

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="myapp"
DUMP_FILE="/tmp/${DB_NAME}_${DATE}.sql.gz"
# 导出(跳过锁表,用single-transaction保证一致性)
mysqldump -h rm-xxx.mysql.rds.aliyuncs.com -u admin -p'your_pass' --single-transaction --routines --triggers $DB_NAME | gzip > $DUMP_FILE
# 上传OSS(提前配置好ossutil,ak/sk写在~/.ossutilconfig)
ossutil64 cp $DUMP_FILE oss://my-backup-prod/db/ --acl private
# 清理7天前的本地临时文件
find /tmp -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete

加进crontab:
0 3 * * * /root/scripts/backup_db.sh >> /var/log/db_backup.log 2>&1

Step 3:应用层打包 → 别只备份/www,要连systemd服务文件一起端走

执行:
tar -zcf /tmp/app_full_$(date +%Y%m%d).tar.gz \ --exclude='/www/logs' \ --exclude='/www/upload' \ --exclude='/tmp' \ /etc/nginx \ /etc/php-fpm.d \ /usr/local/myapp \ /lib/systemd/system/myapp.service \ /root/scripts

重点:
--exclude排除日志和上传目录(它们该进OSS生命周期管理,而非混在全备包里)
myapp.service必须打包!否则恢复后得重新写启动脚本、设开机自启
/root/scripts包含所有运维脚本,这是你的“数字DNA”

Step 4:元数据兜底 → 把控制台操作变成可回放的代码

用阿里云CLI导出关键配置:

  • DNS记录:aliyun alidns DescribeDomainRecords --DomainName example.com > dns.json
  • SSL证书:aliyun sslcertificate DescribeUserCertificateList > cert.json(私钥自己单独存!)
  • 安全组规则:aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId sg-xxx > sg_rules.json

存入OSS的meta/目录,命名规则:meta_20240520.json。每周六凌晨跑一次。

Step 5:每月一次“假死演练” → 备份有效性的唯一裁判

每月第一个周六上午10点,强制执行:
• 从OSS下载最新全备包
• 在新购的按量ECS上部署(不复用旧实例!)
• 恢复RDS(用自动备份)、还原SQL(用逻辑备份)、解压应用包、导入元数据
• 访问首页、登录后台、下一笔测试订单
• 全流程计时,记录失败环节

如果某次演练耗时>45分钟,或出现3处以上人工干预,立刻停机复盘——这才是真·SOP。

三、最后送你三条保命口诀

快照不标环境,等于埋雷:所有快照必须带env:prod/test标签,禁止混用。

备份≠恢复成功:没经过演练的备份,和没写的遗嘱一样,法律效力为零。

私钥不离OSS,离了就凉:SSL私钥、数据库密码、AK/SK——全部加密存OSS,密钥用KMS托管,绝不放ECS本地。

备份不是为了证明“我做过”,而是为了在灾难降临时,能对着老板说一句:“别急,35分钟内全站恢复,我刚在沙盒里练过三遍。”

现在,去你的控制台,打开快照策略页面。别等下次故障,就现在。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系