做VPS这么多年,见过太多用户因为没备份而损失惨重:磁盘突然坏了、误删了数据库、被勒索病毒加密了、商家跑路了……数据丢了就是真丢了,找不回来的。
很多新手觉得"我刚建站没什么数据,不用备份"——等你网站做了半年、有了流量和订单,再丢一次数据你就知道备份有多重要了。这篇文章我会把VPS备份的完整方案讲透,从策略到脚本到自动同步,照着做10分钟配置完,以后再也不用担心数据丢失。

一、先搞懂:数据丢失离你有多近?
很多人觉得数据丢失是小概率事件,不会发生在自己身上,但根据行业统计: - 42%的数据丢失来自硬件故障:SSD/磁盘用久了会坏,机房也可能出故障,再好的服务器也不能保证100%不损坏 - 28%来自人为误操作:rm -rf 删错目录、改错配置、格式化错磁盘,新手老手都犯过 - 15%来自黑客攻击/勒索病毒:网站被入侵、数据被加密、被删库,尤其是WordPress站点 - 7%来自机房事故:火灾、断电、自然灾害,虽然概率低但发生了就是全损 - 8%来自软件Bug和其他原因:数据库损坏、升级失败、面板Bug等

💡 LuckVM小提示:LuckVM所有节点默认提供每周免费快照服务,但快照不等于备份,你依然需要自己做异地备份,因为快照是存在服务器本地磁盘上的,如果磁盘坏了快照也没了。
结论:数据丢失不是小概率事件,每一个用VPS的人都一定会遇到至少一次,区别只是你有没有备份。
二、3-2-1备份黄金法则(行业通用标准)
备份不是随便把文件复制一份就完了,行业公认最安全的备份策略是3-2-1法则,记住这一个原则就够了:
- ✅ 3份数据副本:1份生产环境正在用的 + 2份备份
- ✅ 2种不同的存储介质:比如服务器本地磁盘+对象存储,不要把备份都存在同一块硬盘上
- ✅ 1份异地备份:至少有一份备份在另一台服务器/另一个机房/云存储上,即使整个机房挂了你的数据还在
只要符合这个原则,99.9%的数据丢失场景你都能恢复。听起来很复杂?其实配置起来很简单,后面我会给你完整脚本,照着做就行。
三、应该备份什么?多久备份一次?
不是所有数据都需要每天备份,不同数据重要性不一样,我整理了一张表:

| 数据类型 | 重要程度 | 备份频率 | 保留时间 |
|---|---|---|---|
| MySQL/PostgreSQL数据库(用户/订单/文章) | ⭐⭐⭐⭐⭐ 最高 | 每天1次(电商站建议每小时) | 至少30天 |
| 邮件数据 | ⭐⭐⭐⭐⭐ 最高 | 每天1次 | 至少90天 |
| 网站核心代码/主题/插件 | ⭐⭐⭐⭐ 高 | 每次修改后/每周 | 至少3个版本 |
| 上传的图片/附件/用户文件 | ⭐⭐⭐ 中 | 每周1次 | 至少180天 |
| Nginx/PHP/系统配置文件 | ⭐⭐⭐ 中 | 每次修改后 | 永久保留 |
| 日志文件 | ⭐ 低 | 每月/不用备份 | 7天即可 |
| 系统镜像 | ⭐⭐ 较低 | 重大更新前 | 2个版本 |
新手最小备份方案: 1. 每天自动备份MySQL数据库 2. 每天自动打包网站根目录 3. 自动同步到云存储 4. 自动删除7天前的旧备份 做到这四点就足够应对90%的情况了。
四、4种备份方法对比,新手选哪种?
| 方法 | 难度 | 优点 | 缺点 | 适合人群 |
|---|---|---|---|---|
| 面板一键备份 | ⭐ 最简单 | 点几下鼠标就行,图形化界面 | 依赖面板,灵活性差 | 纯新手,用1Panel/宝塔 |
| Shell脚本自动备份 | ⭐⭐ 简单 | 免费、灵活、不依赖面板、完全可控 | 需要敲几行命令 | 推荐所有人,新手也能复制粘贴 |
| WordPress插件备份 | ⭐⭐ 简单 | 网站后台直接操作,可一键迁移 | 只适合WordPress,大站点容易超时 | 只有WordPress站点的用户 |
| 专业备份工具(Restic/Borg) | ⭐⭐⭐ 中等 | 增量备份、加密、压缩率高 | 配置稍复杂 | 数据量大、多站点的进阶用户 |
我推荐所有新手先从「Shell脚本自动备份」开始:你不需要懂脚本怎么写,我把完整可直接复制的脚本给你,改两个路径就能用,10分钟搞定,以后自动运行不需要管。
五、方法一:1Panel面板一键备份(最省事)
如果你用1Panel面板,备份是最简单的,图形化操作就行:
- 登录1Panel后台 → 点击左侧「计划任务」
- 点击「创建计划任务」→ 任务类型选择「备份网站」或「备份数据库」
- 设置执行周期:建议每天凌晨3点(网站访问最少的时候)
- 选择要备份的网站/数据库
- 备份保存位置:可以选择本地目录,也可以直接配置阿里云OSS/腾讯云COS/S3等云存储
- 设置保留份数:建议保留7份
- 点击确认就完事了,面板会自动帮你每天备份
🔔 注意:即使你用面板备份,也一定要配置一个异地备份(比如云存储),不要只把备份存在服务器本地。
六、方法二:Shell脚本自动备份(推荐,通用所有VPS)
这个脚本是我自己用了很多年的版本,功能包括: - 自动打包所有网站文件 - 自动导出所有MySQL数据库(不需要挨个指定库名) - 自动压缩成.tar.gz格式,自动按日期命名 - 自动删除N天前的旧备份,不会占满磁盘 - 备份完成可选发邮件通知 - 100%独立,不依赖任何面板,所有Linux系统都能用
第一步:创建备份目录
先创建备份存放的目录,建议放在数据盘:
mkdir -p /data/backup
第二步:创建备份脚本
创建备份脚本文件:
nano /data/backup/auto_backup.sh
把下面完整脚本粘贴进去,只需要改最开头的几个配置项就行:
#!/bin/bash
#==================== 配置项,改这里就行 ====================
# 网站根目录,多个目录空格分隔
WEB_DIRS=("/www/wwwroot")
# MySQL用户名密码,一般root就行
MYSQL_USER="root"
MYSQL_PASS="你的MySQL密码"
# 备份存放目录
BACKUP_DIR="/data/backup"
# 备份保留天数,超过自动删除
SAVE_DAYS=7
# 是否备份Nginx配置,1=是,0=否
BACKUP_NGINX=1
NGINX_CONF_DIR="/www/server/nginx/conf"
#=========================================================
# 创建日期目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
mkdir -p $BACKUP_PATH
echo "[$(date)] 开始执行自动备份任务..."
# 1. 备份网站文件
for dir in "${WEB_DIRS[@]}"; do
if [ -d "$dir" ]; then
echo "正在备份网站: $dir"
tar -zcf "$BACKUP_PATH/web_$(basename $dir).tar.gz" -C $(dirname $dir) $(basename $dir)
echo "网站备份完成"
fi
done
# 2. 备份所有MySQL数据库
echo "正在导出MySQL数据库..."
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)" | while read db; do
echo " 导出数据库: $db"
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --default-character-set=utf8mb4 "$db" | gzip > "$BACKUP_PATH/db_${db}.sql.gz"
done
echo "所有数据库导出完成"
# 3. 备份Nginx配置
if [ $BACKUP_NGINX -eq 1 ] && [ -d "$NGINX_CONF_DIR" ]; then
echo "正在备份Nginx配置..."
tar -zcf "$BACKUP_PATH/nginx_conf.tar.gz" -C $(dirname $NGINX_CONF_DIR) $(basename $NGINX_CONF_DIR)
echo "Nginx配置备份完成"
fi
# 4. 打包整个备份目录(可选,方便上传)
cd $BACKUP_DIR
tar -zcf "backup_all_${DATE}.tar.gz" "$DATE/"
rm -rf "$BACKUP_PATH"
# 5. 删除旧备份
echo "删除${SAVE_DAYS}天前的旧备份..."
find $BACKUP_DIR -name "backup_all_*.tar.gz" -type f -mtime +$SAVE_DAYS -delete
echo "旧备份清理完成"
# 6. 计算备份文件大小
BACKUP_SIZE=$(du -h "$BACKUP_DIR/backup_all_${DATE}.tar.gz" | awk '{print $1}')
echo "[$(date)] 全部备份完成!备份文件: backup_all_${DATE}.tar.gz,大小: $BACKUP_SIZE"

保存退出(nano按Ctrl+O,回车,再Ctrl+X),然后给脚本加执行权限:
chmod +x /data/backup/auto_backup.sh
手动执行一次测试,看看能不能正常运行:
/data/backup/auto_backup.sh
如果没有报错,最后显示"全部备份完成"就说明脚本没问题。
第三步:添加定时任务,每天自动执行
测试没问题后,添加cron定时任务,让脚本每天凌晨自动运行:
crontab -e
在文件最后添加一行:
0 3 * * * /data/backup/auto_backup.sh >> /data/backup/backup.log 2>&1
这行的意思是:每天凌晨3点0分自动执行备份脚本,日志写入backup.log。 保存退出就可以了,从现在开始每天凌晨3点会自动备份,不需要你管。
七、方法三:rclone自动同步到异地云存储(实现3-2-1策略)
上面的脚本只是把备份存在服务器本地,这还不够——你需要至少一份异地备份。最简单的方法是用rclone把备份自动同步到云存储。

第一步:安装rclone
curl https://rclone.org/install.sh | bash
第二步:配置云存储
运行配置命令:
rclone config
按照提示一步步配置你用的云存储,支持阿里云OSS、腾讯云COS、七牛、又拍云、AWS S3、Google Drive、OneDrive等等,基本上所有主流云存储都支持,配置过程有中文提示,跟着走就行。
配置完成后你可以手动测试一下能不能上传:
# 测试上传,把myoss换成你配置的名称,bucket换成你的桶名
rclone copy /data/backup/backup_all_xxx.tar.gz myoss:your-bucket-name/backup/
第三步:添加自动同步到备份脚本
编辑你刚才的auto_backup.sh,在最后(删除旧备份之后)加上几行,让备份完成后自动同步到云存储:
# 7. 同步备份到云存储(实现异地备份)
echo "正在同步备份到云存储..."
rclone sync $BACKUP_DIR myoss:your-bucket-name/backup/
echo "云存储同步完成"
这样每天备份完成后,会自动把新备份同步到云存储,自动删除云存储上的旧备份,完全不需要人工干预。即使你的服务器整个坏了、被删了,云存储上还有一份完整备份。
八、最重要的一步:定期测试备份能不能恢复!
这是90%的人都会漏掉的一步,也是最致命的一步:你以为你做了备份,但等真出事的时候发现备份是坏的、不完整、恢复不了,和没备份一样。
⚠️ 记住:没有经过恢复测试的备份,等于没有备份。

你每个月至少要做一次恢复测试,步骤很简单: 1. 下载最近一次的备份文件到本地或者另一台测试服务器 2. 解压备份文件 3. 把数据库导入到测试环境的MySQL 4. 把网站文件放到web目录 5. 访问测试网站,检查: - 网站能不能正常打开 - 图片/文章/页面是不是完整 - 后台能不能登录 - 功能是不是正常(下单/表单/搜索等) 6. 如果一切正常,说明你的备份是有效的,可以安心;如果有问题,及时调整备份脚本,不要等真出事了才发现备份没用。
九、WordPress/WooCommerce电商站特殊备份注意事项
如果你跑的是WooCommerce电商站,备份要求比普通博客高很多,因为订单数据一旦丢了就是真金白银的损失:
- 数据库备份频率提高到每小时一次:订单都是实时产生的,一天备份一次意味着你最多可能丢24小时的订单
- 不要用插件做完整备份:大站点插件备份容易超时、中断,导致备份不完整,用我上面给的Shell脚本最稳妥
- 备份WooCommerce上传目录:
wp-content/uploads/里有所有产品图片,一定要备份 - 不要忘记备份邮件队列和客户数据:WooCommerce的客户列表、订单记录都在数据库里
- 恢复测试一定要做支付测试:恢复后测试下能不能正常下单支付,避免支付配置丢了
十、备份最常见的7个坑,别踩

- ❌ 只备份到服务器本地,没有异地备份:磁盘坏了/商家跑路/被勒索病毒加密,本地备份和生产数据一起没了,一定要做异地备份
- ❌ 从来不测试恢复:备份脚本写错了、数据库备份不全、文件损坏,等用的时候才发现备份没用
- ❌ 备份文件不加密:备份里有所有数据库密码和用户数据,传到第三方云存储一定要加密,避免泄露
- ❌ 备份保留时间太短:只保留3天,很多问题不是马上发现的,可能过了一周才发现数据被篡改了,建议至少保留30天
- ❌ 忘记备份数据库:只备份了网站文件,忘了数据库,等于白备份——网站核心数据全在数据库里
- ❌ 备份脚本不做监控:脚本哪天运行失败了(比如密码改了、磁盘满了),你完全不知道,以为还在正常备份,建议加个邮件通知,失败了发邮件提醒
- ❌ 备份占用满磁盘:没有自动删除旧备份的逻辑,备份越攒越多,最后把系统盘占满,网站直接挂掉
十一、常见问题FAQ
Q:备份会占用很多磁盘空间吗? A:不会,网站文件和数据库压缩后一般只有原大小的20-30%,一个10G的网站备份后大概2-3G,每天备份保留7天也就十几G,完全不用担心。
Q:我用的是LuckVM服务器,有快照还需要自己备份吗? A:需要。快照是存在服务器本地的,磁盘物理损坏的时候快照也会丢,而且快照是手动创建的,不会自动每天给你做。快照适合做重大操作前临时还原,日常备份还是要按这篇文章的方案做。
Q:云存储收费贵不贵? A:非常便宜。阿里云OSS/腾讯云COS存储1G数据一个月只要几分钱,一个小网站一年备份也就几块钱成本,几乎可以忽略不计。
Q:备份的时候会影响网站访问速度吗? A:几乎不会,备份一般设置在凌晨3点这种访问最少的时间段,而且压缩和打包优先级很低,不会占用太多CPU和IO资源。
Q:我只有一个小博客,有必要这么麻烦吗? A:有必要。哪怕你只有10篇文章,真丢了重新写也要花好几天时间,花10分钟配置好自动备份,一劳永逸。
Q:可以把备份备份到另一台VPS吗? A:当然可以,用rclone或者scp/rsync同步到另一台VPS也是非常好的异地备份方案,甚至比云存储还安全。
Q:被勒索病毒加密了,备份能恢复吗? A:可以,只要你的异地备份没有被加密。勒索病毒一般只会加密本地磁盘,只要你云存储上的备份没被感染,恢复备份就行。
Q:备份需要加密吗?怎么加密? A:如果备份包含敏感数据(用户信息/订单),建议加密。可以用zip加密或者restic/borg这类自带加密的备份工具,或者在rclone配置里开启服务端加密。
Q:我不会写脚本,LuckVM能帮我配置吗? A:可以,LuckVM新用户购买服务器后,联系客服可以免费帮你配置好自动备份+异地同步,不需要你自己动手。
Q:服务器宕机了怎么用备份恢复? A:新服务器装好环境,下载最新的备份文件,解压→导入数据库→放到web目录→修改配置文件的数据库密码,就恢复完成了,一般半小时以内就能搞定。
✅ 备份配置检查清单(配置完打勾)
- [ ] 备份脚本配置完成,手动执行测试成功
- [ ] cron定时任务添加完成,每天自动运行
- [ ] rclone配置完成,能正常同步到云存储
- [ ] 自动删除旧备份功能正常,不会占满磁盘
- [ ] 至少做过一次完整的恢复测试,确认备份能用
- [ ] 电商站数据库备份频率设置为每小时一次
- [ ] 备份日志能正常查看,失败会收到通知
- [ ] Nginx/PHP等配置文件也包含在备份里
- [ ] 异地备份和本地备份不在同一个机房/服务商
- [ ] 至少保留30天内的备份版本
相关阅读
- 🛡️ Linux服务器安全加固15条,建议收藏
- 🚚 VPS网站搬家完整教程:零downtime迁移指南
- 🛡️ VPS被DDoS攻击怎么办?完整防御指南
- 🛒 WooCommerce独立电商站搭建完整教程
- 📊 1Panel面板完整使用教程
- 💻 2026年海外VPS选购终极指南
本文由LuckVM技术团队原创发布,转载请注明出处。LuckVM提供香港/日本/新加坡/美国洛杉矶四大高速节点,CN2 GIA三网优化线路,NVMe SSD+独享带宽,所有节点默认带DDoS防护,支持7天无理由退款,新用户可联系客服免费协助配置自动备份和网站迁移。





