VPS 备份与快照指南
服务器可能因为错误的更新、误操作、恶意软件或硬件故障而出问题。完善的方案应当结合快照、备份以及经过测试的恢复流程。在 ONIE 平台上,胡志明市的云服务器支持快照和备份功能,你还可以额外添加 Block Storage 用于存放数据。
快照与备份的对比
| 快照 | 备份 | |
|---|---|---|
| 定义 | 某一时刻磁盘的保存状态 | 服务器或其数据的独立副本 |
| 适用场景 | 升级或修改配置前快速回滚 | 从丢失、损坏或误删中恢复 |
| 存放位置 | 靠近原服务器 | 独立的存储设备 |
| 速度 | 创建和恢复都很快 | 较慢,取决于数据大小 |
两者配合使用:风险操作前做快照,其他情况则定期做备份。
3-2-1 规则
重要数据至少保留 3 份副本,存放在 2 种不同类型的存储介质上,并且有 1 份副本存放在异地。仅在同一台服务器上做快照是不够的。
备份文件
rsync 只复制有变化的内容:
rsync -aH --delete /var/www/ backup@backup-host:/srv/backups/www/restic 可以将加密且去重的备份写入多个目标:
sudo apt install -y restic
restic -r sftp:backup@backup-host:/srv/restic init
restic -r sftp:backup@backup-host:/srv/restic backup /var/www /etc
restic -r sftp:backup@backup-host:/srv/restic forget --keep-daily 7 --keep-weekly 4 --prune备份数据库
与直接复制正在运行的数据文件不同,应使用转储(dump)来备份数据库:
mysqldump --single-transaction --routines -u root wordpress | gzip > /var/backups/wordpress-$(date +%F).sql.gzPostgreSQL 请使用 pg_dump。
自动化执行
使用 cron 或 systemd timer 定时执行备份,并设置保留策略,自动删除旧副本:
sudo crontab -e
# every day at 02:30
30 2 * * * /usr/local/bin/backup.sh测试恢复
未经恢复测试的备份只是一种猜测。每月一次,将备份恢复到备用服务器,检查网站和数据是否正常工作。把步骤写下来,方便团队中的任何人都能执行。
重大变更前
先创建快照,再进行变更,测试通过后,确认无误时删除快照。这一做法与安全的 SSH 配置搭配效果很好,同样的习惯也适用于升级 WordPress 站点。
常见问题
应该多久备份一次?
对于经常变化的网站和数据库,每天备份较为常见。如果丢失一天的数据会造成严重影响,请增加备份频率。
快照会被收费吗?
快照和备份按其占用的空间计费。请查看服务的定价页面了解当前费率。
备份应该存放在哪里?
不要只存放在同一台服务器上。使用其他位置或其他服务商,这样单点故障就不会删除所有副本。