建站备份方案:文件加数据库双保险
网站备份只备文件?数据库漏了等于白备。小够给你一套文件加数据库的双保险方案:命令行和面板两种做法,定时自动跑,出事能恢复。
我是小够。
见过太多站长:网站被黑、误删、商家跑路,哭着来问"能恢复吗",一问备份——“我备了文件,数据库忘了”。网站 = 文件 + 数据库,少一样都恢复不了,这是建站备份的第一课。
今天给一套最小可行的双保险方案,个人小站照抄就行,命令行和面板两种做法都讲。
备份什么:三样东西
1. 网站文件
WordPress 的 wp-content、Halo 的数据目录、静态站的 html 文件——总之是你上传、修改过的所有文件。系统文件不用备,重装就行。
2. 数据库
文章、评论、用户、配置,全在数据库里。只备文件不备数据库,恢复出来是个空壳。MySQL/MariaDB 用 mysqldump,SQLite 直接拷文件。
3. 配置文件
Nginx 配置、SSL 证书、定时任务(crontab)。这些东西重建起来最费时间,顺手一起打包。
做法一:命令行定时备份
手动备份等于没备份——你坚持不了一个月。用 cron 定时任务,每天凌晨自动跑:
# 每天凌晨 3 点备份网站文件
0 3 * * * tar -czf /backup/site-$(date +\%F).tar.gz /var/www/html
# 每天凌晨 3 点半备份数据库
30 3 * * * mysqldump -u root -p'你的密码' --all-databases | gzip > /backup/db-$(date +\%F).sql.gz
# 只保留最近 7 天的备份,自动删旧的
0 4 * * * find /backup -name "*.gz" -mtime +7 -delete
三行 cron,文件和数据库都有了,旧备份自动清理,硬盘不会爆。
异地同步再加一行:
# 每天凌晨 5 点同步到另一台机器
0 5 * * * rsync -az /backup/ 用户@另一台IP:/backup/
做法二:面板一键备份
用宝塔、1Panel 的,点点鼠标就行:
- 宝塔:计划任务 → 添加"备份网站"“备份数据库”,设置执行周期(每天一次)、保留份数,备份路径可以选远程存储。
- 1Panel:计划任务 → 创建备份任务,网站和数据库分开建,支持备份到本地或对象存储。
面板的好处是可视化,坏处是换面板就得重配。命令行脚本的好处是通用,走到哪都能用。小够建议:面板用户也看一眼命令行做法,技多不压身。
存哪:异地是底线
备份存在同一台机器上,机器挂了备份一起挂——这叫"假备份"。至少做到异地一份:
- 传到另一台 VPS(
rsync一把梭) - 传到对象存储(R2、OSS、S3 都行,便宜,一个月几块钱)
- 传到家里的 NAS 或电脑
小够的建议:本地一份 + 异地一份。异地那份可以频率低一点(一周一次),关键时刻能救命就行。
对象存储配置一次就行:建个 bucket,拿个 API 密钥,用 rclone 或面板自带的对象存储备份功能,定时同步。rclone 配好后,一条命令就能同步:
rclone sync /backup/ remote:my-bucket/backup/
多久备一次
- 个人博客:每天一次,保留 7 天
- 有收入的站:每天一次,保留 30 天,数据库可以每小时增量
- 几乎不更新的静态站:一周一次足够
备份频率和你的更新频率挂钩:一天写三篇文章,就别一周备一次。
恢复步骤:提前写好
备份的另一半是恢复,步骤提前写成文档:
- 新机器装好环境(Nginx、PHP、MySQL,版本尽量和原来一致)
- 解压网站文件到对应目录,改好权限
- 新建数据库,导入 sql 备份
- 恢复 Nginx 配置和 SSL 证书
- 打开网站,前后台都点一点验证
光写不行,要演练。拿一份备份在新机器上真的恢复一遍,详见我写的《灾难恢复演练》。
备份频率进阶:增量备份
每天全量备份,硬盘吃不消?上增量:
- 文件增量:
rsync只同步变化的文件,配合--link-dest做硬链接快照,7 天的备份只占 1 天多的空间 - 数据库增量:开 binlog,每天全量 + 每小时增量,RPO 能压到 1 小时内
个人小站全量就够了,业务站再考虑增量。别为了"高级"把简单有效的方案搞复杂,够用主义同样适用于备份策略。
备份检查清单
对照着打勾:
- 网站文件在备
- 数据库在备(别漏!)
- 配置文件、证书在备
- 定时任务在跑(检查最近 3 天的备份文件日期)
- 有异地备份
- 备份文件能解压、数据库能导入
- 做过一次恢复演练
小够的提醒
- 备份文件要加密或设权限:数据库里有用户信息,备份包
chmod 600,别谁都能读。 - 测试备份完整性:定时任务跑起来后,第一周手动检查几次,确认文件真的生成了、能解压。
- 面板用户也别偷懒:宝塔、1Panel 都有计划任务和备份功能,点点鼠标就能配好,没借口不备份。
- 换商家前先备份:迁移 VPS 时,完整备份是后悔药,迁移前先做一份全量。
不同建站程序的备份要点
WordPress
- 文件:
wp-content目录(主题、插件、上传的图片) - 数据库:mysqldump 全库导出
- 特别注意:
wp-config.php里有数据库密码,备份时别泄露
Halo
- Halo 2.x 数据都在工作目录,整个目录打包就行
- 用的是 H2 数据库的话,数据库文件也在工作目录里,一起打包
- 升级 Halo 前先备份,跨版本升级翻车是常事
静态站(Hugo/Hexo)
- 源文件(Markdown)和生成的 public 都备,源文件最重要
- 丢了源文件,public 还能凑合用;丢了 public,源文件能重新生成
- 这类站备份最简单,一个 git 仓库就搞定
数据库单独说一句
mysqldump 导出时加 --single-transaction,不锁表,网站不用停:
mysqldump -u root -p'密码' --single-transaction --all-databases | gzip > /backup/db-$(date +%F).sql.gz
备份不花钱,出事才花钱。每天凌晨三分钟的 cron,换来的是睡安稳觉——这买卖,值。