先说一个反常识的事实:你的 VPS 大概率不会因为商家宕机丢数据,但会因为你自己一条手滑的 rm 命令、一次没打补丁的漏洞、或者商家一纸封户通知,让几个月的工作一夜归零。这三种死法对应三种防御,缺一种就多一种裸奔。这篇文章按「快照 → 异地备份 → 自动化」三件套给你完整方案,所有命令都来自我们 10 月底对自己 WordPress 站点的真实备份演练,直接照抄可用。
为什么快照不能替代备份
很多人以为在商家面板点个快照就万事大吉,这是备份认知里最大的坑。先看三件套各自防什么:
| 层级 | 防什么 | 防不了什么 | 成本 |
|---|---|---|---|
| 快照 | 误操作、升级失败、配置改崩——需要「回到十分钟前」的场景 | 商家跑路、账户被封、机房级故障——快照和主机同命 | 通常按存储计费(下文有实价) |
| 异地备份 | 以上全部——数据离开商家,拿到你自己手里 | 懒——手动备份坚持不了三个月 | 几十 GB 硬盘空间 |
| 自动化 | 人性——把「记得备份」变成「不用记得」 | 自动化本身出 bug 没人发现 | 一次配置时间 |
记住一句话:快照是后悔药,异地备份是保命符,自动化是让前两者真正发生的机制。三件套少一件,等于那一种死法你没设防。
第一件:快照——大动作前必拍
快照是整块磁盘某一时刻的完整镜像,恢复就是整盘回滚。它的正确用法不是日常备份,而是在每次大动作前手动拍一个:升级 PHP 前快照、更换主题前快照、迁移网站前快照。改坏了?一键回滚,十分钟前世界恢复原样。
收费方面拿数据最全的 Vultr 举例(官网定价页与文档确认):手动快照按存储计 $0.05/GB/月(按压缩后大小算),一台 25GB 盘的机器长期挂一个快照大约 $1.25/月;如果开启自动备份功能,则是基础月费加收 20%($6/月的机器变成 $7.2/月)。Vultr 官网传送门 → 各家定价策略类似,都不贵,但别把快照当免费午餐无限拍,拍完确认没用了就删。
快照的致命局限必须说透:它存在商家的存储池里,商家跑路、你的账户被封、机房整体故障时,快照和你一起消失。所以它只配当三件套的第一件,不能当唯一一件。关于选商家时怎么评估靠谱程度,另见我们的 Vultr 深度测评。
第二件:异地备份——WordPress 全套实操命令
异地备份的核心是:数据要离开这台 VPS,落到你自己手里(本地电脑、家里 NAS、另一家的对象存储都行)。WordPress 站需要备份的东西就两样:数据库(全部文章和设置)+ 文件目录(主题、插件、上传的图片)。下面是我们真实执行过的完整流程,以 Ubuntu + MySQL 为例,10 分钟内可完成:
第一步:导出数据库(2 分钟)
mysqldump --single-transaction -u 数据库用户 -p 数据库名 | gzip > /tmp/db_backup.sql.gz
关键参数 --single-transaction:备份期间不锁表,网站照常访问,导出的又是一致性快照。数据库名和用户名在 WordPress 根目录的 wp-config.php 里能查到。我们 362MB 的站点,数据库导出压缩后只有 2.9MB——文本数据压缩率极高,别担心体积。
第二步:打包文件目录(3 分钟)
tar -czf /tmp/wp_files.tar.gz /var/www/wordpress
把整个 WordPress 目录(含 wp-content 里的全部图片)打成一个包。我们这个站 17,687 个文件,最终压缩包 104MB。如果你只想要核心数据,单独打包 wp-content 目录也行,主题插件都能重装,图片丢了才是真疼。
第三步:下载到本地并校验(5 分钟)
scp root@你的服务器IP:/tmp/db_backup.sql.gz D:\backup\(Windows 10+ 自带 scp 命令)
下载完别急着关窗口——不校验的备份等于没备份。两步验证:
- 传输完整性:服务器上
md5sum 文件名,本地certutil -hashfile 文件名 MD5,两边哈希一致才算数; - 包本身可解:
gzip -t和tar -tzf测试能否正常解开,数据库包还要确认尾部有Dump completed标记——这是导出完整跑完的官方指纹,没有它就是中途断了。
这套流程我们实测全程 12 分钟,服务器全程无感(测试方法见 VPS 性能测试教程 的工具)。备份包记得妥善存放——里面含 wp-config.php(有数据库密码),别传公开网盘、别发任何人。
第三件:自动化——让备份自己发生
手动备份的结局可以预言:前两周勤勤恳恳,第三周开始「这周再说」,某天想起来的时候正是出事的时候。所以第三件套是把上面的流程交给机器:
服务器端:cron 定时任务
crontab -e 添加一行(每周日凌晨 3 点自动备份数据库并清理 7 天前的旧包):
0 3 * * 0 mysqldump --single-transaction -u用户 -p密码 数据库名 | gzip > /opt/backups/db_$(date +\%F).sql.gz && find /opt/backups -mtime +7 -delete
本地端:定时拉取 + 轮换保留
服务器上的备份依然在商家手里,所以本地再设一个每周定时任务(Windows 任务计划 / Mac Launchd),用 scp 把最新备份拉到本地,保留最近 4 份、自动删除更旧的——既防丢失又不用操心磁盘膨胀。我们把整套流程做成了每周二自动执行的定时任务,跑了一个月零失败,这是普通站长用零成本就能达到的企业级方案。
自动化最容易被忽略的一环:备份结果要有人看
自动化的最大风险是「以为在备份,其实早就静默失败了」(磁盘满了、密码改了、路径错了)。两个廉价对策:定时任务完成后给自己发一封邮件或推送;每周顺手看一眼备份目录的文件日期和大小。磁盘余量也要看——我们演练时特意检查过,VPS 磁盘用到 76% 时就该警惕,90% 以上时宁可先清理再备份,别把服务器塞死。
恢复演练:备份的意义在恢复
最后一步 90% 的人从没做过:拿一份备份,真的把站恢复一遍。命令其实就四条:
- 建库:
mysql -u用户 -p -e "CREATE DATABASE 新库名" - 导入:
gunzip < db_backup.sql.gz | mysql -u用户 -p 新库名 - 解包:
tar -xzf wp_files.tar.gz -C /var/www/ - 改
wp-config.php里的数据库名为新库名,重启,完事
建议每半年在测试环境演练一次。没演练过的恢复方案只是理论——真出事时你不会想第一次实践就是灾难现场。安全类事故(被黑、挂码)恢复后的排查思路,参考我们的 PHP2Shell 应急指南 的入侵排查一节。
备份频率怎么定
| 你的站 | 快照 | 异地备份 | 保留 |
|---|---|---|---|
| 日更的内容站、电商 | 每次改版前 | 每天 | 最近 7 份 |
| 周更的博客、企业站(大多数人的情况) | 每次大动作前 | 每周 | 最近 4 份 |
| 几乎不动的展示页 | 改的时候拍 | 每月 | 最近 2 份 |
常见问题
Q:商家自带的每日备份服务要买吗?
便宜可以买,但它属于「商家侧冗余」,不是异地备份——商家出事它跟着出事。它最大的价值是恢复省事(面板一键),适合当第四件补充,不能替代你把数据拿到自己手里。
Q:网站被黑了,恢复旧备份会不会把后门也恢复回来?
会。恢复到被黑之前的备份点,然后把所有密码(数据库、后台、SSH)全部改掉,并按应急指南排查可疑文件。备份只解决数据丢失,不解决入侵根因。
Q:备份文件放哪里最合适?
至少两个位置:本地电脑(或 NAS)+ 一个不同商家的存储(如另一家云的对象存储)。「同一台电脑 + 同一个网盘账号」算一个位置。
Q:虚拟主机(共享主机)怎么办?
用 cPanel/Plesk 自带的备份向导,或 UpdraftPlus 这类 WordPress 插件定时备份到网盘。原理相同:数据库 + wp-content 两样东西拿全。
Q:还没备份,现在第一件事做什么?
现在。就按本文第二节的命令跑一遍手动备份,12 分钟。然后设个每周提醒。黑五季很多人趁促销买新机器搬家,搬家前那份备份尤其重要——优惠信息见我们的 黑五实时汇总页 和 全年促销汇总页。
