搬瓦工异地备份教程:网站、数据库和 Docker 数据如何恢复

KiwiVM 快照适合在系统变更前快速回滚,但网站、数据库和附件仍需要一份独立副本。把压缩包留在同一台 VPS,遇到服务删除、磁盘故障或账户事件时,可能与原数据一起失去。
本文使用 MariaDB 逻辑导出 + restic 加密仓库,以 SFTP 目标为例。恢复过程也一并说明:只有能在独立环境恢复的数据,才真正构成可用备份。
一、先列清要备份的对象

至少包括数据库导出、网站附件和代码配置、Nginx/PHP 配置,以及部署清单。Docker 应先识别每个容器的命名卷和绑定目录;只保存 Compose,不能恢复其中数据库里的订单。
活跃数据库不要直接用 tar 拷贝数据目录作为唯一方案。逻辑导出、数据库专用备份和正确停库的冷备份,各有适用条件;本文使用逻辑导出,并协调文件写入。快照操作可另看 搬瓦工快照与自动备份教程。
二、准备独立仓库与密钥
准备你拥有的远端备份主机、专用账号和目录,先验证 SSH 主机指纹与最小访问权限。在执行备份的账户下配置密钥和 SFTP 访问,不关闭主机身份校验。
安装 restic 后,先以交互方式为全新仓库初始化:
sudo apt install restic
# 示例主机、用户和目录必须替换为你自己的目标
restic -r sftp:[email protected]:/srv/bwh-repo init
仓库密码必须另存到可靠位置。它与远端 SSH 密钥是两种不同凭据;拥有远端文件不等于能够解密,丢失仓库密码可能无法恢复。已有仓库不要重新初始化。[1]
自动运行时使用 RESTIC_REPOSITORY 和 RESTIC_PASSWORD_FILE 指向受限配置,密码文件设为 600、父目录设为 700。不要把密码直接写入公开脚本或日志。
三、先导出数据库,再备份协调后的文件

以下以 Debian / Ubuntu 的本机 socket 管理 MariaDB 为例。把数据库名换成实际名称;远程数据库或容器数据库应使用对应客户端连接方式。
sudo install -d -m 0700 /root/backup-staging
sudo sh -c 'umask 077; mariadb-dump --single-transaction \
--routines --events --triggers wp_site > /root/backup-staging/wp_site.sql'
查看退出状态和日志,不要只看 SQL 文件存在。--single-transaction 适用于事务表,并不能替代对非事务表、DDL 和应用附件一致性的安排。需要严格一致时,暂停相关写入或使用专门的一致性备份方案。[2]
配置好仓库和密码文件后,从同一个运行账户执行:
restic backup /var/www/bwh-site /etc/nginx /root/backup-staging \
--tag bwh-site
restic snapshots
本例路径需要读取权限;若使用 root 执行,SSH 配置和 restic 凭据也应属于 root 的受控环境,不能假设它自动继承普通用户的 SSH Key。备份遇到部分文件读取失败时应按失败处理,不能吞掉非零退出状态。[3]
临时 SQL 仍然含敏感业务数据。确认上传和记录完成后按保留计划清理本轮暂存,避免永久留在公开目录。若任务失败,应保留必要错误现场并限制文件访问。
四、把自动计划和告警一起安排
使用 systemd timer 或 cron 时,为每次运行加互斥锁,避免前一轮尚未完成就启动下一轮。记录开始时间、结束时间、数据库导出结果、restic 退出状态和快照标识。
包内 templates/backup-job.sh 是示例骨架:默认只检查,需要填写仓库、站点与数据库参数并显式运行。它不自动删除仓库历史,不执行任意数据卷清理。上线前先手动跑一轮,并确认失败能被监控发现。
备份下载、上传和仓库校验会消耗流量与 I/O。根据 月流量统计 留出预算,压缩、备份和数据库导入不要都安排在同一时刻。
五、恢复到一个新的测试目录

先列快照,再按主机、标签和时间选出明确 ID,不直接使用可能指向别的项目的 latest:
restic snapshots
# 替换快照 ID;恢复目录应是新建、非生产路径
restic restore SNAPSHOT_ID --target /srv/bwh-restore-test
restic check
check 与实际恢复承担不同验证任务;默认检查不等于每次都读遍所有数据块。需要抽样或完整数据校验时,按仓库规模和工具支持安排读取策略,同时预估流量。[4]
把恢复出的 SQL 导入全新的测试数据库,再用受控配置启动网站。验证最近文章或订单、附件文件、用户设置和后台任务。测试环境关闭外发通知、真实支付与自动回调,防止恢复演练再次处理生产订单。
六、Docker 数据怎么备份
命名卷和绑定目录都需要明确归属。对数据库容器,优先用数据库工具导出并检查退出状态;文件目录可以用 restic 备份。若选择停机冷备份,应正确停止数据库并保存相关卷和版本信息,不能只暂停一个 Web 容器就认为数据库已静止。
恢复时先创建独立项目和数据位置,不直接挂载线上卷。镜像升级可能伴随数据结构升级,所以恢复记录中要包含镜像版本或摘要、Compose 以及配置来源。
七、保留策略先预演,再删除

例如从每天、每周、每月分别保留副本出发制定策略,具体份数取决于误删发现时间和可接受的数据损失。下面只是预演,不会回收空间:
restic forget --tag bwh-site --keep-daily 7 --keep-weekly 4 \
--keep-monthly 6 --dry-run
核对主机、路径、标签和分组,确认没有删除其他项目的唯一副本后,再考虑正式 forget 和 prune。prune 会修改仓库并产生资源开销,不适合每次备份后无条件执行。[5]
加密防止无密钥者读取,不等于防止有仓库访问权的人删除备份。对重要业务应进一步考虑权限隔离、离线副本或支持的不可变保存机制,不能把所有恢复能力交给一台已被入侵的源服务器。
常见问题
快照和异地备份选一个就行吗?
它们解决不同恢复需求,可以互补。不要让唯一副本和原服务处在同一故障范围。
备份文件能列出来就算可恢复吗?
不够。至少完成一次真实恢复、数据库导入和业务检查,并保留结果。
restic 密码忘记了能找回来吗?
不能寄希望于存储服务商替你解密。提前把恢复凭据另存并验证,避免密码与源服务器一起丢失。
相关阅读
- 搬瓦工VPS 2026选购指南:从入门到旗舰,哪款最适合你?
- 搬瓦工快照与自动备份教程
- 搬瓦工流量用完怎么办?流量统计和重置时间
- 搬瓦工 VPS 修改 root 密码、SSH 端口和 SSH Key 教程
- 搬瓦工 KiwiVM 控制面板完整使用教程
参考资料

