# 备份与恢复：文件、数据库和整机快照

一份备份只有成功恢复过，才算经过验证。整机快照方便回退，应用备份便于迁移，两者可以配合使用。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/backup-restore/

## 1. 备份要能恢复完整业务

网站通常至少包含程序文件、用户上传、数据库、环境变量、反向代理配置和计划任务。只下载网页目录可能没有文章数据；只导出数据库又可能缺图片。先写一张清单，注明每项的路径、备份方式和恢复顺序。

快照适合回到某个磁盘状态，应用级备份更适合跨机器迁移和恢复单个站点。服务商自动备份的频率、保留期与可用性取决于套餐，不应把它当成唯一副本。

![从实例面板进入快照和自动备份菜单](https://stock.iftalking.com/tutorial-media/provider-kiwivm-overview.jpg)

*图示说明：服务商官方知识库公开截图（旧版界面），用于对照功能名称；当前菜单位置可能调整。图中的套餐、IP、端口和日期仅为示例。*

## 2. 创建应用一致的备份

数据库使用自身导出工具或受支持的物理备份方案；网站有写入操作时，安排短维护窗口或使用应用支持的一致性流程。WordPress 的具体数据库步骤见[数据库备份](https://stock.iftalking.com/guides/database-backup/)。

文件归档前确认路径和剩余空间，备份放在网站公开目录之外，防止 `.sql`、`.env` 或压缩包被直接下载。

```bash
tar -czf /home/deploy/site-files-backup.tar.gz -C /var/www example.com
tar -tzf /home/deploy/site-files-backup.tar.gz | head
sha256sum /home/deploy/site-files-backup.tar.gz
```

命令中的网站目录需要替换，当前用户必须有读取权限。在线持续写入的大文件不一定能通过普通 tar 得到一致副本，要按应用要求处理。

## 3. 使用 KiwiVM 快照时核对状态与时间

进入 Snapshots，创建快照前记录当前业务状态，等待任务完成后确认它确实出现在列表中，查看时间、描述和保留规则。自动备份与手工快照可能使用不同的容量和保留策略，不能因为看到菜单就假设每天都有可恢复副本。

导出快照时，下载链接或导入令牌可能允许访问完整磁盘数据，应当像密钥一样保存。跨实例导入前确认架构、磁盘大小和产品支持范围；导入完成后不等于已经切换业务。

## 4. 把副本保存到实例之外

至少保留一份在另一台机器或独立存储中的备份，并限制访问。涉及客户数据、数据库和私钥时使用加密备份，恢复密钥另行保管。备份留在同一块磁盘上，无法应对误删磁盘、实例终止或磁盘故障。

设置保留策略，例如日备份与周备份分层，但具体数量按数据变化和恢复要求决定。删除旧副本前先确认最近备份成功，不要让一次失败任务把所有旧备份也清掉。

## 5. 真正做一次恢复演练

在隔离的测试目录或测试实例恢复文件与数据库，配置正确权限，再测试首页、登录、图片、搜索、上传和后台管理。测试环境应关闭真实邮件、支付回调和定时通知，避免恢复演练触发业务动作。

恢复快照会覆盖当前状态；执行前先备份从快照时间到现在新增的数据。旧 `.disk` 镜像需要匹配的磁盘/分区工具读取，不要把未知镜像直接挂载为可写或启动到生产网络。

## 6. 自动备份验收看四件事

每次任务记录开始和完成时间、文件大小、校验值以及失败原因。定期检查异地副本能下载、解密和恢复，容量不足或连续失败要产生可见告警。

迁移时先降低写入或短暂停写，完成最后一次同步，再切 DNS。详细流程见[WordPress 迁移](https://stock.iftalking.com/guides/wordpress-migration/)、[定时任务](https://stock.iftalking.com/guides/time-cron/)与[文件传输](https://stock.iftalking.com/guides/files-transfer/)。


## 完成后检查

保存恢复步骤、所需软件版本和密钥位置；定期测试一份较旧的备份，确认长期副本也能使用。

## 参考资料

- [WordPress 开发与运维手册](https://developer.wordpress.org/advanced-administration/security/backup/)
- [服务商官方说明](https://bandwagonhost.com/kb.php?action=displayarticle&id=30)
