2026年VPS备份与灾难恢复方案:数据丢了不用哭,3步搞定自动备份

2026年VPS备份与灾难恢复方案:数据丢了不用哭,3步搞定自动备份

“数据丢了”——这是VPS用户最怕听到的四个字。

硬盘会坏、系统会崩、会被攻击、会误操作。我见过太多人因为没有备份,一夜回到解放前:几个月的文章、客户数据、网站配置,全部归零。

备份不是"建议做",而是"必须做"。今天教你搭建完整的VPS备份体系,从自动备份到异地存储,再到一键恢复。

本文适合谁: 所有VPS用户。数据无价,备份免费,没有理由不做。

为什么需要备份?灾难场景发生概率无备份后果有备份后果硬盘故障中数据全丢,从零开始恢复备份,1小时恢复被黑客攻击高数据泄露/加密恢复到攻击前状态误删文件极高找不回来从备份恢复VPS商跑路低数据永久丢失异地备份还在系统崩溃中重装系统+数据丢失重装+恢复备份铁律:数据至少保存3份,存放在2个不同地方,其中1份是异地。

备份策略选择策略适用场景复杂度成本定期手动备份个人博客⭐免费Cron自动备份所有场景⭐⭐免费异地备份生产环境⭐⭐⭐低增量备份大数据量⭐⭐⭐低快照备份VPS提供商支持⭐看提供商方案一:基础自动备份(Cron + 本地)最简单的方案:用cron定时执行备份脚本。

创建备份脚本# 创建脚本目录

mkdir -p /opt/scripts /backup

# 创建备份脚本

cat > /opt/scripts/backup.sh << 'EOF'

#!/bin/bash

# VPS自动备份脚本

# 配置

BACKUP_DIR="/backup"

DATE=$(date +%Y%m%d)

KEEP_DAYS=7

# 创建今日备份目录

mkdir -p $BACKUP_DIR/$DATE

# 1. 备份系统配置

echo "Backing up system configs..."

cp -r /etc/nginx $BACKUP_DIR/$DATE/nginx

cp -r /etc/ssh $BACKUP_DIR/$DATE/ssh

cp /etc/crontab $BACKUP_DIR/$DATE/crontab

crontab -l > $BACKUP_DIR/$DATE/user-crontab

# 2. 备份Web目录(根据实际情况修改)

echo "Backing up web files..."

if [ -d "/var/www" ]; then

tar -czf $BACKUP_DIR/$DATE/www.tar.gz /var/www

fi

# 3. 备份数据库(MySQL)

echo "Backing up MySQL databases..."

if command -v mysqldump &> /dev/null; then

databases=$(mysql -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)")

for db in $databases; do

mysqldump --single-transaction --routines --triggers $db | gzip > $BACKUP_DIR/$DATE/mysql-$db.sql.gz

done

fi

# 4. 备份PostgreSQL

echo "Backing up PostgreSQL databases..."

if command -v pg_dumpall &> /dev/null; then

sudo -u postgres pg_dumpall | gzip > $BACKUP_DIR/$DATE/postgres-all.sql.gz

fi

# 5. 备份Docker容器数据

echo "Backing up Docker data..."

if [ -d "/opt/minecraft" ]; then

tar -czf $BACKUP_DIR/$DATE/minecraft.tar.gz /opt/minecraft/data

fi

# 6. 删除旧备份

echo "Cleaning old backups..."

find $BACKUP_DIR -maxdepth 1 -type d -mtime +$KEEP_DAYS -exec rm -rf {} \;

echo "Backup completed: $DATE"

EOF

chmod +x /opt/scripts/backup.sh

设置定时任务# 每天凌晨4点执行备份

echo "0 4 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1" | crontab -

# 验证

crontab -l

手动执行测试sudo /opt/scripts/backup.sh

方案二:异地备份(rclone + 云存储)本地备份不够安全——如果VPS整个挂了,备份也没了。需要用rclone把备份同步到云存储。

安装rclonecurl https://rclone.org/install.sh | sudo bash

配置云存储rclone config

按提示配置:

n) New remote

name> backup

Storage> 选择存储类型(推荐以下之一)

存储类型免费额度推荐度Google Drive15GB⭐⭐⭐OneDrive5TB⭐⭐⭐S3 (AWS)5GB/12个月⭐⭐Backblaze B210GB⭐⭐⭐阿里云OSS5GB⭐⭐使用Google Drive作为备份目标# 配置Google Drive

rclone config

# 选择 google drive

# 按浏览器授权提示操作

# 测试连接

rclone ls backup:

# 创建备份目录

rclone mkdir backup:vps-backup/$(hostname)

同步备份到云端# 同步今日备份到Google Drive

rclone sync /backup/$(date +%Y%m%d) backup:vps-backup/$(hostname)/$(date +%Y%m%d)

# 或者同步整个备份目录

rclone sync /backup/ backup:vps-backup/$(hostname)/ --progress

完整备份脚本(含异地同步)cat > /opt/scripts/backup-full.sh << 'EOF'

#!/bin/bash

# 完整备份脚本(本地+异地)

DATE=$(date +%Y%m%d)

BACKUP_DIR="/backup/$DATE"

RCLONE_REMOTE="backup:vps-backup/$(hostname)/$DATE"

# 创建备份目录

mkdir -p $BACKUP_DIR

# 执行备份(复用上面的备份逻辑)

/opt/scripts/backup.sh

# 同步到云端

echo "Syncing to cloud..."

rclone sync $BACKUP_DIR $RCLONE_REMOTE --progress

# 清理本地旧备份(保留3天)

find /backup -maxdepth 1 -type d -mtime +3 -exec rm -rf {} \;

echo "Full backup completed: $DATE"

EOF

chmod +x /opt/scripts/backup-full.sh

# 每天凌晨4点执行完整备份

echo "0 4 * * * /opt/scripts/backup-full.sh >> /var/log/backup-full.log 2>&1" | crontab -

方案三:数据库专用备份数据库是最需要备份的——代码可以重写,但数据丢了就真没了。

MySQL自动备份# 创建MySQL备份脚本

cat > /opt/scripts/backup-mysql.sh << 'EOF'

#!/bin/bash

# MySQL自动备份

DATE=$(date +%Y%m%d)

BACKUP_DIR="/backup/mysql/$DATE"

mkdir -p $BACKUP_DIR

# 获取所有数据库

DATABASES=$(mysql -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)")

# 逐个备份

for DB in $DATABASES; do

echo "Backing up $DB..."

mysqldump --single-transaction --routines --triggers --triggers $DB | gzip > $BACKUP_DIR/$DB.sql.gz

done

# 同步到云端

rclone sync $BACKUP_DIR backup:vps-backup/mysql/$(hostname)/$DATE --progress

# 清理7天前的备份

find /backup/mysql -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

echo "MySQL backup completed: $DATE"

EOF

chmod +x /opt/scripts/backup-mysql.sh

# 每6小时备份一次数据库

echo "0 */6 * * * /opt/scripts/backup-mysql.sh >> /var/log/backup-mysql.log 2>&1" | crontab -

PostgreSQL自动备份cat > /opt/scripts/backup-postgres.sh << 'EOF'

#!/bin/bash

# PostgreSQL自动备份

DATE=$(date +%Y%m%d)

BACKUP_DIR="/backup/postgres/$DATE"

mkdir -p $BACKUP_DIR

# 获取所有数据库

DATABASES=$(sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | tr -d ' ')

# 逐个备份

for DB in $DATABASES; do

echo "Backing up $DB..."

sudo -u postgres pg_dump $DB | gzip > $BACKUP_DIR/$DB.sql.gz

done

# 同步到云端

rclone sync $BACKUP_DIR backup:vps-backup/postgres/$(hostname)/$DATE --progress

# 清理7天前的备份

find /backup/postgres -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

echo "PostgreSQL backup completed: $DATE"

EOF

chmod +x /opt/scripts/backup-postgres.sh

方案四:VPS快照备份很多VPS提供商支持快照功能,一键保存整个系统状态。

各提供商快照功能提供商快照功能免费额度价格Vultr自动快照1个快照$0.05/月/GBRackNerd手动备份—免费(需自己备份)Hostinger自动备份1份包含在套餐中DigitalOcean快照—$0.06/月/GBLinode图像备份—$0.10/月/GBVultr快照操作# 通过Vultr API创建快照

curl -s "https://api.vultr.com/v2/instances/$(INSTANCE_ID)/snapshots" \

-X POST \

-H "Authorization: Bearer $VULTR_API_KEY" \

-H "Content-Type: application/json" \

-d '{"description": "Auto snapshot '$(date +%Y%m%d)'"}'

快照 vs 文件备份特性快照备份文件备份恢复速度极快(分钟级)中等(视数据量)存储成本较高低灵活性低(整个系统)高(可选择性恢复)异地存储一般不支持支持增量支持一般支持可手动实现推荐组合: 快照做整机备份(防硬盘故障)+ 文件备份做数据备份(防误删)。

灾难恢复备份的目的是恢复。当你需要恢复数据时:

恢复网站文件# 从备份恢复Web目录

rclone copy backup:vps-backup/$(hostname)/20260529/www.tar.gz /tmp/

cd /

tar -xzf /tmp/www.tar.gz

恢复MySQL数据库# 从备份恢复MySQL

rclone copy backup:vps-backup/mysql/$(hostname)/20260529/mydb.sql.gz /tmp/

gunzip /tmp/mydb.sql.gz

mysql -u root -p mydb < /tmp/mydb.sql

恢复PostgreSQL数据库# 从备份恢复PostgreSQL

rclone copy backup:vps-backup/postgres/$(hostname)/20260529/mydb.sql.gz /tmp/

gunzip /tmp/mydb.sql.gz

sudo -u postgres psql mydb < /tmp/mydb.sql

恢复系统配置# 从备份恢复Nginx配置

rclone copy backup:vps-backup/$(hostname)/20260529/nginx/ /etc/nginx/

sudo systemctl restart nginx

# 恢复SSH配置

rclone copy backup:vps-backup/$(hostname)/20260529/ssh/ /etc/ssh/

sudo systemctl restart sshd

备份验证备份不验证等于没有备份。定期检查备份是否真的可用。

# 创建验证脚本

cat > /opt/scripts/verify-backup.sh << 'EOF'

#!/bin/bash

# 备份验证脚本

LATEST_BACKUP=$(ls -t /backup | head -1)

VERIFY_DIR="/tmp/verify-backup"

echo "Verifying backup: $LATEST_BACKUP"

# 检查备份文件是否存在

if [ ! -d "/backup/$LATEST_BACKUP" ]; then

echo "ERROR: Backup directory not found!"

exit 1

fi

# 检查MySQL备份是否可解压

for file in /backup/$LATEST_BACKUP/mysql-*.sql.gz; do

if [ -f "$file" ]; then

if gzip -t "$file"; then

echo "OK: $file is valid"

else

echo "ERROR: $file is corrupted!"

fi

fi

done

# 检查Web备份是否可解压

if [ -f "/backup/$LATEST_BACKUP/www.tar.gz" ]; then

if tar -tzf /backup/$LATEST_BACKUP/www.tar.gz > /dev/null; then

echo "OK: www.tar.gz is valid"

else

echo "ERROR: www.tar.gz is corrupted!"

fi

fi

echo "Verification completed"

EOF

chmod +x /opt/scripts/verify-backup.sh

# 每周验证一次备份

echo "0 5 * * 0 /opt/scripts/verify-backup.sh >> /var/log/verify-backup.log 2>&1" | crontab -

推荐备份方案根据你的需求选择:

需求推荐方案月成本个人博客Cron + rclone + Google Drive免费个人项目Cron + rclone + OneDrive免费小型业务Cron + rclone + B2 + 快照$5-10生产环境增量备份 + 异地多副本 + 快照$10-20最简方案(5分钟搞定)# 1. 安装rclone

curl https://rclone.org/install.sh | sudo bash

# 2. 配置云存储

rclone config

# 3. 创建备份脚本

cat > /opt/scripts/daily-backup.sh << 'SCRIPT'

#!/bin/bash

DATE=$(date +%Y%m%d)

tar -czf /tmp/backup-$DATE.tar.gz /var/www /etc/nginx /etc/ssh 2>/dev/null

rclone copy /tmp/backup-$DATE.tar.gz backup:vps-backups/$(hostname)/

rm /tmp/backup-$DATE.tar.gz

find /tmp -name "backup-*.tar.gz" -mtime +7 -delete

SCRIPT

chmod +x /opt/scripts/daily-backup.sh

# 4. 添加定时任务

echo "0 4 * * * /opt/scripts/daily-backup.sh" | crontab -

# 5. 测试

/opt/scripts/daily-backup.sh

常见问题Q: 备份占多少空间?取决于你的数据量。一个典型的WordPress网站备份约100-500MB。MySQL数据库备份压缩后通常只有原大小的10-20%。

Q: 备份会影响VPS性能吗?Cron备份通常在凌晨执行,对性能影响很小。如果数据量大,可以用 nice 和 ionice 降低优先级:

nice -n 19 ionice -c3 /opt/scripts/backup.sh

Q: 我用 RackNerd,需要自己备份吗?是的,RackNerd不提供自动备份服务。但你可以用本文的方案自己备份,完全免费。

Q: Hostinger 的自动备份够用吗?Hostinger提供每周自动备份,但只保留最近1份。建议还是自己做异地备份,双重保险。

Q: 备份数据需要加密吗?如果备份包含敏感数据(客户信息、密码等),建议加密:

# 使用GPG加密

tar -czf - /var/www | gpg -c -o backup-$(date +%Y%m%d).tar.gz.gpg

# 解密恢复

gpg -d backup-20260529.tar.gz.gpg | tar -xzf -

总结备份是VPS运维的底线。花30分钟设置好自动备份,可能救你几个月的数据。

备份铁律:

自动化——手动备份早晚会忘异地化——本地备份不够安全验证化——定期检查备份是否可用多重化——至少两种备份方式并行💡 下一步: 备份搞好了,再做个安全加固,让你的VPS固若金汤。

Disclaimer: Some links are affiliate links. We may earn a commission at no extra cost to you.

相关推荐

365bet新手开户指南 Steam 上的 【豪华版】嗜血印本体+全部服装DLC
365彩票手机版下载 检讨书范文300字

检讨书范文300字

📅 07-15 👁️ 9427
365bet新手开户指南 枯木处理步骤

枯木处理步骤

📅 09-25 👁️ 4541