VPS数据备份全攻略:从手动备份到异地容灾一次讲清


很多站长把网站跑起来之后就再没管过数据,直到某天服务器故障、机房停电、或者手滑删错了文件,才猛然发现“数据没了”。备份这件事,平时看不见摸不着,一旦用到就是救命的。这篇按真实可操作的方式,把 VPS 数据备份从手动到自动、从本机到异地讲清楚,照着做就能把“数据丢失”的风险降到最低。

一、先想清楚:你要备份什么

动手之前先盘一盘服务器上有哪些值钱的数据:

  • 网站文件:程序源码、上传的图片、主题和插件(WordPress/Typecho 的 wp-content 或 usr 目录等)。
  • 数据库:文章、评论、用户、订单,几乎所有核心数据都在这里。
  • 配置文件:Nginx、PHP、MySQL 的配置,出问题时恢复配置能省大量时间。
  • 其他:日志、定时任务(crontab)、环境变量等。

优先级排序:数据库 > 网站文件 > 配置文件。预算和时间有限时,先保证数据库和网站文件有备份。

二、最基础的:手动备份

备份数据库

MySQL/MariaDB 最常用 mysqldump:

mysqldump -u root -p --single-transaction --default-character-set=utf8mb4 数据库名 > backup.sql

加上 --single-transaction 可以在不锁表的情况下备份 InnoDB 表;备份完记得压缩:gzip backup.sql,能省不少空间。

备份网站文件

用 tar 打包网站目录,排除缓存和日志:

tar -czf www_backup.tar.gz -C / var/www/html --exclude='cache' --exclude='logs'

备份配置

把 /etc 下的关键配置一起打包,恢复时对比着改就行。

三、进阶:定时任务自动备份

手动备份容易忘,真正的解决方案是交给 crontab 定时执行。写一个简单的备份脚本 backup.sh,放在 /root/scripts 下:

#!/bin/bash
BACKUP_DIR=/root/backups
DATE=$(date +%Y%m%d)
# 备份数据库
mysqldump -u root -p密码 数据库名 | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# 备份网站文件
tar -czf $BACKUP_DIR/www_$DATE.tar.gz -C / var/www/html
# 清理 7 天前的备份
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete

然后添加定时任务,每天凌晨 3 点执行:

crontab -e
0 3 * * * /root/scripts/backup.sh

注意:脚本里的数据库密码建议放在单独的配置文件中并设置好权限,避免明文躺在脚本里。

四、关键一步:异地备份

备份如果只存在同一台服务器上,服务器整机挂了,备份一样跟着没了。所以必须做“异地备份”——把备份文件同步到另一台机器或对象存储。

最常用的工具是 Rclone,它可以对接几乎所有云存储:阿里云 OSS、腾讯云 COS、AWS S3、Backblaze B2,甚至 Google Drive。安装和配置:

apt install rclone
rclone config

按提示选择存储类型、填写密钥,完成后测试:rclone ls 远程名:。然后在备份脚本末尾加一行同步:

rclone sync $BACKUP_DIR 远程名:backups/服务器名/

配合前面的定时任务,每天的备份会自动推到异地,做到真正的“双重保险”。

五、恢复演练:备份没验证等于没有

备份最大的坑是“备了但恢复不了”。建议每隔一段时间做一次恢复演练:把备份文件下载到一台干净的机器或新 VPS 上,导入数据库、解压文件,确认网站能正常跑起来。恢复命令大致如下:

gunzip -c db_20261016.sql.gz | mysql -u root -p 数据库名
tar -xzf www_20261016.tar.gz -C /

演练过一次之后,真出事时你才不会手忙脚乱。

六、几点补充建议

  • 重要站点可以再加一层对象存储的版本控制或多版本功能,误删也能找回。
  • 数据库大的站点,可以考虑用二进制日志(binlog)做增量备份,把丢失窗口压缩到分钟级。
  • 用宝塔面板等可视化面板的话,面板自带计划任务和备份功能,可以直接在界面上配置,原理和命令行一致。
  • 备份文件建议加密后上传,避免对象存储泄露导致敏感数据外流(可以用 gpg 或 rclone 的加密 remote)。

结语

数据备份没有技术含量上的难度,难的是“习惯”。花一个下午把脚本配好、异地同步打开、恢复演练跑一遍,之后它就安安静静地每天替你兜底。真到服务器出问题那天,你会感谢现在的自己。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

网站数据备份与恢复实战:从全量备份到异地容灾一次讲清

test

评 论