1.
准备与前提检查
- 确认访问:能通过SSH(ssh user@IP)访问问题服务器或云控制台。
- 权限与凭证:准备云控制台API Key/CLI凭证、root或sudo权限账号、备份存储访问权限(S3/对象存储)。
- 环境信息清单:记录实例ID、镜像ID、挂载盘(/dev/vdb 等)、应用端口、数据库类型及版本、当前DNS TTL值。
2.
制定恢复策略与RTO/RPO
- 明确目标:RTO(恢复时间目标)和RPO(数据丢失容许时间),例如RTO=10分钟,RPO=1小时。
- 策略选择:若RTO非常短优先快照回滚;若RPO严格优先增量备份+数据库二进制日志恢复。
3.
生产环境快速快照备份(在线快照)
- 操作步骤:在云控制台或CLI上对系统盘和数据盘分别发起快照(snapshot create --instance-id i-xxx --name "prefix-YYYYMMDD-HHMM")。
- 一致性保障:对数据库建议先执行事务冻结步骤(MySQL:FLUSH TABLES WITH READ LOCK;备份后UNLOCK TABLES),或使用文件系统一致性工具(xfs_freeze)。
4.
文件级备份与增量同步
- 全量打包:sudo tar -czf /tmp/files_backup_$(date +%F_%H%M).tar.gz /var/www /etc/nginx --exclude='/var/www/cache'。
- 增量同步示例:rsync -avz --delete /var/www/ backup@example-storage:/backup/www/,并保留最近N份。
5.
数据库导出与二进制日志处理
- MySQL 完整导出:mysqldump -u root -p --single-transaction --routines --triggers --events --databases mydb > /backup/mydb_$(date +%F_%H%M).sql。
- 二进制日志:启用binlog并记录位置,记录当前logfile和pos(SHOW MASTER STATUS;),便于按时间点恢复(PITR)。
6.
验证备份完整性与可用性
- 本地恢复验证:在测试实例上恢复tar包并导入数据库,检查应用能否正常启动。
- 校验脚本:对备份文件做MD5/SHA256校验并记录到备份清单。
7.
故障发生时的快速判定流程
- 判断范围:先判定是单实例应用故障、系统盘损坏、还是数据库逻辑错误。
- 决策树:若系统盘损坏 → 从快照恢复(步骤8);若数据误删/误改 → 从最近数据库备份+binlog回放恢复(步骤9)。
8.
快照回滚实操:用快照立刻恢复实例
- 创建新磁盘:cloud-cli disk create --snapshot-id snap-xxx --size SIZE --availability-zone az1。
- 挂载或替换磁盘:停止目标实例(sudo shutdown now),在控制台替换系统盘或将数据盘卸载旧盘并挂载新盘,启动实例并检查系统日志(journalctl -b)。
9.
从备份文件恢复应用与数据库
- 恢复文件:scp /backup/files.tar.gz root@new-ip:/tmp && tar -xzf /tmp/files.tar.gz -C /.
- 导入数据库:mysql -u root -p < /backup/mydb.sql;若需按时间点恢复,先导入最近全量,再用mysqlbinlog回放binlog到目标时间点。
10.
DNS与IP切换步骤(减少宕机时间)
- 预置新实例:提前启动新实例并做健康检查。
- 降低TTL:故障前将DNS记录TTL设置为低值(例如60秒)。发生切换时在控制台将A记录指向新实例IP并确认生效(nslookup / dig +trace)。
11.
恢复后验证与灰度发布
- 健康检查:访问应用关键页面、执行数据库读写、检查日志无错误。
- 灰度流量:若使用负载均衡器,先将少量流量切到新节点观察,再全部切换。
12.
自动化脚本与常用命令清单
- 快照脚本示例:cloud-cli snapshot create --instance-id $ID --name "auto-$(date +%F_%H%M)" && echo "$ID,$SNAP" >> /var/log/snapshots.log。
- 恢复脚本骨架:停止服务 -> mount/replace磁盘 -> restore files -> restore db -> start services -> run smoke tests。
13.
常见故障排查要点
- 无法启动:检查 /var/log/syslog 或 journalctl,确认磁盘UUID和fstab一致。
- 数据不一致:比对表记录数、时间戳,若丢数据使用binlog回放或增量备份恢复。
14.
备份策略建议与保留周期
- 建议:每日全量+每小时增量,关键数据保留30天,系统镜像保留90天。
- 定期演练:至少每季度做一次演练恢复,确保RTO/RPO可达成。
15.
安全与权限注意事项
- 备份加密:传输、存储均采用加密(TLS、对象存储加密)。
- 最小权限:备份API Key和恢复脚本使用最小权限策略,避免滥用。
16.
总结与实施清单
- 关键清单:1) 备份策略文件;2) 快照与备份脚本;3) 恢复演练步骤文档;4) 联系人及权限清单。
- 建议先在测试环境完成一次端到端恢复,记录耗时并优化流程。
17.
问:遇到快照回滚后启动失败,如何快速排查?
- 答:先进入控制台查看实例控制台输出并用救援模式挂载磁盘检查 /etc/fstab 和 /boot;确认内核和initramfs匹配,必要时用chroot修复UUID或恢复正确的GRUB配置,恢复后重启。
18.
问:如果数据库误删数据但快照较旧,如何减少数据丢失?
- 答:先使用最近的全量备份恢复到临时库,再用binlog根据时间点回放(mysqlbinlog --start-datetime="..." --stop-datetime="..." binlog-files | mysql),恢复后比对并替换线上表或用应用层切换。
19.
问:如何把恢复时间缩短到几分钟级别?
- 答:提前准备冷备镜像与热备实例,保持低TTL、自动化快照挂载脚本和预先配置好的启动脚本;关键是演练和自动化,能把人工操作时间降到最小。
来源:故障恢复 日本秒解云服务器快速回滚与备份恢复实操要点