
cp -r 不是备份,是复制
把网站目录 cp -r 一份,看起来很稳妥,但它作为"备份"有几个硬伤:
| 问题 | 后果 |
|---|---|
| 不保留权限与属主 | 恢复后文件属主变成当前用户,PHP 可能没权限写 → 站点报错 |
| 符号链接被展开成实体 | 体积暴涨,恢复后结构还可能不正确 |
| 隐藏文件容易漏 | .user.ini、.htaccess 这类恰恰是关键配置 |
| 没有版本 | 同一个副本被新内容覆盖后,你就失去了"改之前"的那一版 |
| 占空间且就地存放 | 放在同一个目录树里,误删父目录时一起没 |
| 数据库完全没备份 | 文章、选项、用户全在数据库里,只复制文件等于什么都没备 |
最关键的一条:WordPress 的"内容"主要在数据库里。文件只是皮肤和插件。
一、什么时候该备份什么
按改动范围分三层,别用同一招套所有情况:
| 改动 | 备份什么 | 恢复成本 |
|---|---|---|
| 改一个 nginx 配置 / 一个插件文件 | 单个文件 | 秒级 |
| 换主题、改站点结构 | 数据库 + 网站文件 | 分钟级 |
| 改 PHP/系统参数、计划任务 | 对应配置文件 + crontab -l | 分钟级 |
第二层的标准做法:
# 数据库(必须!)
mysqldump -h <host> -u <user> -p <db> | gzip > db-$(date +%F).sql.gz
# 网站文件
tar -czf site-$(date +%F).tar.gz -C /www/wwwroot/example.com .
# 系统层改动
crontab -l > cron-before.txt
cp /www/server/php/82/etc/php.ini /www/backup/php-ini-bak-$(date +%F)
二、比备份更重要的是"记下回滚路径"
这一步几乎所有人都省,但它才是备份的意义所在。
备份的时候顺手把回滚命令写在注释里,恢复时照着执行就行,不用现场回忆:
# 2026-09-27 新增字体防盗链
# 备份:/www/backup/nginx-conf-backup/example.com.conf.bak-20260927-font-referer
# 回滚:删掉本段 location,nginx -t && nginx -s reload
/**
* 回滚:删除本文件。删除后版权行恢复主题原本的英文 "All rights reserved."。
*/
区别:只留一个备份文件,三个月后你打开它,未必想得起来"当时到底改了什么、要改回哪里去"。而注释里的回滚说明是跟改动绑在一起的,永远不会走散。
三、命名要能自解释
我自己的命名规则是 <对象>-<日期>-<主题>:
mokiii-20260927-themeswitch/ # 2026-09-27 换主题
mokiii-20260927-cache-exclusion/ # 缓存排除规则调整
nginx-conf-backup/example.com.conf.bak-20260927-font-referer
php-fpm.conf.bak (放在 php-fpm-and-cron-20261002/ 里)
禁忌:backup1、bak、new、final、final2。这类名字三天后就没法回溯了。
日期用 YYYYMMDD 而不写月份名:排序即时间序,ls 一下就是时间线。
四、三个容易被忽略的点
① 备份不能只放一个地方
备份和源文件在同一块磁盘上,磁盘挂了就一起没。至少要挪到另一个路径、另一个磁盘、或对象存储。
② 备份也要"错峰"
多个站点的自动备份如果都设在凌晨同一时间,会同时打满磁盘 IO。错开 10 分钟都能好很多。
③ 没验证过的备份等于没有备份
定期真的恢复一次(到一个测试环境)。最常见的翻车是:
mysqldump因为权限/字符集问题只导出了一半;tar默默跳过了没有读权限的文件;- 备份文件本身是 0 字节(磁盘满的时候)。
# 最低成本的验证:能解开、体积合理
gzip -t db-2026-10-02.sql.gz && ls -lh db-2026-10-02.sql.gz
tar -tzf site-2026-10-02.tar.gz | wc -l
五、作为方法论
把这件事固化成习惯,其实只有三条:
- 改之前先备份(而不是改完再想"刚才应该备份一下");
- 备份时同步写下回滚命令,写在改动旁边的注释里;
- 命名带对象、日期、主题,让它三个月后还能自解释。
做到这三条,你在服务器上做的每一个改动就都是可逆的——这比"操作很小心"要可靠得多。
一句话总结:cp -r 只是复制,不是备份。真正的备份是「数据库 + 文件 + 配置」按范围分层,并且把回滚命令写在改动旁边——备份的价值不在于文件本身,而在于三个月后你还知道自己该改回哪里。

评论 (0)