VPS 數據備份與恢復完整指南 2026

💡 重要提醒: 沒有備份策略的服務器就是在裸奔。硬盤故障、誤操作、黑客入侵,任何一項都可能讓幾個月甚至幾年的工作成果瞬間消失。備份是你唯一的保險。
本文將帶你從最簡單的 rsync 開始,一直到企業級的 BorgBackup 增量備份方案,覆蓋:
- ✅ 文件級增量備份
- ✅ 數據庫完整備份
- ✅ Docker 數據卷備份
- ✅ 系統級快照還原
- ✅ 自動化定時任務
- ✅ 異地容災方案
一、備份策略的 3-2-1 原則
在開始之前,先記住業界公認的黃金備份原則:
| 要素 | 含義 | 說明 |
|---|---|---|
| 3 份副本 | 原始數據 + 2 份備份 | 不要把雞蛋放在同一個籃子 |
| 2 種介質 | 本地 + 異地 + 雲端 | 硬盤、對象存儲、另一臺服務器 |
| 1 份離線 | 至少 1 份離線保存 | 防止勒索軟件一鍋端 |
實戰建議:
VPS 服務器
↓ (每日 rsync 增量)
NAS / 外部硬盤 (本地備份)
↓ (每週 BorgBackup 加密)
對象存儲 (S3 / OSS / Backblaze) (異地備份)
↓ (每月一次)
冷存儲 / 離線硬盤 (離線備份)二、基礎工具:rsync 入門
2.1 什麼是 rsync?
rsync 是 Linux 世界最經典的文件同步工具,特點:
- ✅ 增量同步:只傳輸變化的部分
- ✅ 支持壓縮:傳輸時自動壓縮
- ✅ 保留權限:完整保留文件權限、時間戳
- ✅ 支持遠程:通過 SSH 同步到遠程服務器
- ✅ 斷點續傳:中斷後可繼續
2.2 基礎語法
# 基本格式
rsync [選項] 源 目標
# 本地備份
rsync -av /home/user/data/ /mnt/backup/user-data/
# 遠程備份(推送到遠端)
rsync -av /home/user/data/ user@backup-server:/mnt/backup/
# 遠程備份(從遠端拉取)
rsync -av user@source-server:/home/data/ /local/backup/2.3 常用參數詳解
| 參數 | 含義 | 典型使用場景 |
|---|---|---|
-a | 歸檔模式,保留所有屬性 | 幾乎所有備份場景 |
-v | 詳細輸出,顯示傳輸過程 | 調試、日常使用 |
-z | 傳輸時壓縮數據 | 網絡帶寬有限時 |
-h | 人類可讀的數字格式 | 配合 -v |
--delete | 刪除目標中已不存在於源的文件 | 做鏡像同步時用 |
--dry-run | 僅測試,不實際傳輸 | 執行前先測試 |
--progress | 顯示傳輸進度 | 大文件傳輸時 |
--exclude | 排除指定文件/目錄 | 排除緩存、臨時文件 |
2.4 實用示例
# 完整備份 home 目錄到外部硬盤
rsync -avh --progress \
--exclude='node_modules' \
--exclude='.cache' \
--exclude='*.log' \
/home/your-user/ \
/mnt/external-drive/backup/home/
# 測試運行(只顯示將要做什麼)
rsync -avh --dry-run --progress /source/ /destination/
# 遠程備份到備份服務器(通過 SSH)
rsync -avzh \
-e 'ssh -p 22' \
--exclude='node_modules' \
/var/www/ \
backupuser@192.168.1.100:/mnt/backup/www/2.5 備份腳本(入門級)
#!/bin/bash
# 文件名: backup-daily.sh
# 作用: 每日增量備份重要目錄
# ===== 配置 =====
SOURCE_DIRS="/home /etc /var/www /var/log"
DEST_DIR="/mnt/backup/daily"
DATE=$(date +%Y-%m-%d)
LOG_FILE="/var/log/backup-$DATE.log"
# ===== 執行備份 =====
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 開始備份..." >> $LOG_FILE
for dir in $SOURCE_DIRS; do
echo "正在備份: $dir" >> $LOG_FILE
rsync -avh \
--exclude='node_modules' \
--exclude='.git' \
--exclude='*.log' \
$dir \
$DEST_DIR/ >> $LOG_FILE 2>&1
done
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 備份完成" >> $LOG_FILE保存後賦權並測試:
chmod +x backup-daily.sh
./backup-daily.sh三、企業級方案:BorgBackup
3.1 為什麼選擇 BorgBackup?
| 特性 | rsync | BorgBackup |
|---|---|---|
| 增量備份 | ✅ 簡單增量 | ✅ 去重增量(僅存變更塊) |
| 壓縮 | ✅ 傳輸時 | ✅ 存儲時 + 傳輸時 |
| 加密 | ❌(依賴 SSH) | ✅ AES-256 端到端加密 |
| 去重 | ❌ | ✅ 跨備份全局去重 |
| 快照 | ❌ | ✅ 自動創建時間點快照 |
| 恢復點 | 單個最新版本 | 多個歷史版本 |
3.2 安裝 BorgBackup
# Debian / Ubuntu
sudo apt update && sudo apt install -y borgbackup
# CentOS / RHEL
sudo dnf install -y epel-release
sudo dnf install -y borgbackup
# 驗證安裝
borg --version3.3 初始化備份倉庫
# 初始化本地倉庫(會提示設置密碼)
borg init --encryption=repokey /mnt/backup/my-borg-repo
# 初始化遠程倉庫
borg init --encryption=repokey ssh://backupuser@192.168.1.100:/mnt/backup/my-repo
# 無密碼(僅本地測試用)
borg init --encryption=none /mnt/backup/test-repo加密方式選擇:
| 方式 | 適用場景 | 特點 |
|---|---|---|
repokey | 推薦 | 密鑰存在倉庫中,用密碼保護 |
keyfile | 極高安全需求 | 密鑰存在本地 ~/.config/borg/ |
authenticated | 只防篡改不加密 | 可信任存儲環境 |
none | 僅測試 | 無任何安全措施 |
3.4 創建備份
# 創建一個備份快照
borg create --stats --progress \
/mnt/backup/my-borg-repo::$(hostname)-$(date +%Y-%m-%d-%H%M%S) \
/home /etc /var/www /var/log
# 帶排除列表的完整備份
borg create --stats --progress --compression zstd \
--exclude 'node_modules' \
--exclude '.git' \
--exclude '*.log' \
--exclude '*.pyc' \
--exclude '/home/*/.cache' \
/mnt/backup/my-borg-repo::server1-$(date +%Y-%m-%d) \
/home /etc /var/www /opt3.5 查看和管理備份
# 列出所有備份
borg list /mnt/backup/my-borg-repo
# 查看某個備份的文件列表
borg list /mnt/backup/my-borg-repo::server1-2026-06-15
# 查看備份信息
borg info /mnt/backup/my-borg-repo
borg info /mnt/backup/my-borg-repo::server1-2026-06-15
# 比較兩個備份的差異
borg diff /mnt/backup/my-borg-repo::server1-2026-06-14 server1-2026-06-153.6 恢復文件
# 方法一:掛載備份(推薦)
borg mount /mnt/backup/my-borg-repo::server1-2026-06-15 /mnt/borg-mount
# 現在你可以像普通目錄一樣瀏覽和複製文件
ls /mnt/borg-mount/
cp /mnt/borg-mount/home/user/important-file.txt /home/user/
# 卸載
borg umount /mnt/borg-mount
# 方法二:直接提取文件
borg extract /mnt/backup/my-borg-repo::server1-2026-06-15 \
home/user/important-file.txt
# 方法三:完整恢復到指定目錄
cd /tmp/restore
borg extract /mnt/backup/my-borg-repo::server1-2026-06-153.7 刪除舊備份
# 刪除指定備份
borg delete /mnt/backup/my-borg-repo::server1-2026-06-01
# 保留策略:保留最近 7 天每日 + 4 周 + 6 個月
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
/mnt/backup/my-borg-repo
# 回收空閒空間
borg compact /mnt/backup/my-borg-repo3.8 完整的 BorgBackup 自動化腳本
#!/bin/bash
# 文件名: borg-backup.sh
# 作用: BorgBackup 全自動備份腳本
# ===== 配置 =====
export BORG_REPO='/mnt/backup/my-borg-repo'
export BORG_PASSPHRASE='你的加密密碼-請用強密碼-隨機字符串'
BACKUP_PATHS='/home /etc /var/www /opt /root'
HOSTNAME=$(hostname)
DATE=$(date +%Y-%m-%d-%H%M%S)
LOG_FILE='/var/log/borg-backup.log'
# ===== 備份前檢查 =====
echo "[$(date)] 開始備份 $HOSTNAME..." >> $LOG_FILE
# 檢查倉庫是否可訪問
if ! borg info $BORG_REPO > /dev/null 2>&1; then
echo "[$(date)] 錯誤: 無法訪問備份倉庫 $BORG_REPO" >> $LOG_FILE
exit 1
fi
# ===== 創建備份 =====
borg create --stats --progress --compression zstd \
--exclude 'node_modules' \
--exclude '.git' \
--exclude '*.log' \
--exclude '*.pyc' \
--exclude '/home/*/.cache' \
--exclude '/tmp' \
--exclude '/var/tmp' \
--exclude '/proc' \
--exclude '/sys' \
--exclude '/dev' \
--exclude '/run' \
--exclude '/mnt' \
--exclude 'lost+found' \
::$HOSTNAME-$DATE \
$BACKUP_PATHS >> $LOG_FILE 2>&1
# ===== 清理舊備份 =====
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
>> $LOG_FILE 2>&1
# ===== 回收空間 =====
borg compact >> $LOG_FILE 2>&1
# ===== 清理環境變量 =====
unset BORG_PASSPHRASE
echo "[$(date)] 備份完成" >> $LOG_FILE重要安全提醒: 包含密碼的腳本權限必須設置為 700:
chmod 700 borg-backup.sh
chown root:root borg-backup.sh四、數據庫備份
4.1 MySQL / MariaDB 備份
# 導出所有數據庫(帶時間戳)
mysqldump -u root -p \
--all-databases \
--single-transaction \
--quick \
--lock-tables=false \
| gzip > /mnt/backup/mysql/all-databases-$(date +%Y-%m-%d).sql.gz
# 導出單個數據庫
mysqldump -u root -p db_name | gzip > backup/db_name-$(date +%Y-%m-%d).sql.gz
# 恢復數據庫
gunzip < backup/db_name-2026-06-15.sql.gz | mysql -u root -p db_name自動化 MySQL 備份腳本:
#!/bin/bash
# mysql-backup.sh
DB_USER='backup_user'
DB_PASS='your-password'
BACKUP_DIR='/mnt/backup/mysql'
DATE=$(date +%Y-%m-%d-%H%M%S)
MAX_DAYS=30
mkdir -p $BACKUP_DIR
# 備份所有數據庫
mysqldump -u $DB_USER -p$DB_PASS \
--all-databases \
--single-transaction \
--quick \
--lock-tables=false \
| gzip > $BACKUP_DIR/all-databases-$DATE.sql.gz
# 刪除 30 天前的備份
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$MAX_DAYS -delete4.2 PostgreSQL 備份
# 備份所有數據庫
pg_dumpall -U postgres | gzip > /mnt/backup/postgres/all-$(date +%Y-%m-%d).sql.gz
# 備份單個數據庫
pg_dump -U postgres db_name | gzip > /mnt/backup/postgres/db_name-$(date +%Y-%m-%d).sql.gz
# 只備份結構
pg_dump -U postgres -s db_name > db-schema.sql
# 恢復
gunzip < backup.sql.gz | psql -U postgres4.3 SQLite 備份
# 方式一:使用 .backup 命令(推薦,安全且可在線備份)
sqlite3 /path/to/database.db ".backup /mnt/backup/sqlite/database-$(date +%Y-%m-%d).db"
# 方式二:直接複製文件(僅在數據庫關閉時)
cp /path/to/database.db /mnt/backup/sqlite/database.db
# 驗證備份完整性
sqlite3 /mnt/backup/sqlite/database.db ".tables"4.4 MongoDB 備份
# 完整備份
mongodump --uri "mongodb://localhost:27017" \
--out /mnt/backup/mongodb-$(date +%Y-%m-%d)
# 壓縮備份
mongodump --uri "mongodb://localhost:27017" --archive \
| gzip > /mnt/backup/mongodb-$(date +%Y-%m-%d).gz
# 恢復
mongorestore /mnt/backup/mongodb-2026-06-15/
# 或從壓縮包恢復
mongorestore --gzip --archive=/mnt/backup/mongodb-2026-06-15.gz4.5 Redis 備份
# 觸發 BGSAVE(後臺保存)
redis-cli BGSAVE
# 等待完成後複製 RDB 文件
sleep 5
cp /var/lib/redis/dump.rdb /mnt/backup/redis/dump-$(date +%Y-%m-%d).rdb
# 恢復 Redis 數據
systemctl stop redis-server
cp /mnt/backup/redis/dump-2026-06-15.rdb /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis-server五、Docker 數據卷備份
5.1 數據卷手動備份
# 查看所有數據卷
docker volume ls
# 備份數據捲到 tar 文件
docker run --rm \
-v my-data-volume:/data \
-v /mnt/backup:/backup \
ubuntu:24.04 \
tar czf /backup/my-data-$(date +%Y-%m-%d).tar.gz /data
# 恢復數據卷
docker run --rm \
-v my-data-volume:/data \
-v /mnt/backup:/backup \
ubuntu:24.04 \
tar xzf /backup/my-data-2026-06-15.tar.gz -C /5.2 使用 docker-backup 工具
# 安裝 docker-backup 腳本
curl -sL https://raw.githubusercontent.com/offen/docker-volume-backup/main/docker-volume-backup.sh \
| sudo tee /usr/local/bin/docker-backup
sudo chmod +x /usr/local/bin/docker-backup
# 備份所有數據卷
docker-backup backup --all --output /mnt/backup/docker-volumes/
# 備份指定數據卷
docker-backup backup db-data nginx-logs --output /mnt/backup/docker-volumes/5.3 自動化備份所有容器
#!/bin/bash
# docker-backup.sh
BACKUP_DIR='/mnt/backup/docker'
DATE=$(date +%Y-%m-%d)
MAX_DAYS=14
mkdir -p $BACKUP_DIR
# 獲取所有數據卷
VOLUMES=$(docker volume ls -q)
for volume in $VOLUMES; do
echo "備份數據卷: $volume"
docker run --rm \
-v $volume:/data \
-v $BACKUP_DIR:/backup \
ubuntu:24.04 \
tar czf /backup/$volume-$DATE.tar.gz /data
done
# 刪除過期備份
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +$MAX_DAYS -delete
# 備份鏡像列表
docker images > $BACKUP_DIR/images-$DATE.txt
# 備份容器配置
docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}' > $BACKUP_DIR/containers-$DATE.txt5.4 使用 docker-compose 備份
# 停止容器(避免寫入不一致)
docker-compose stop
# 備份數據卷
docker run --rm \
-v $(basename $(pwd))_db-data:/data \
-v /mnt/backup:/backup \
ubuntu:24.04 tar czf /backup/db-data-$(date +%Y-%m-%d).tar.gz /data
# 備份 compose 配置
cp docker-compose.yml /mnt/backup/docker-compose-$(date +%Y-%m-%d).yml
# 啟動容器
docker-compose start六、系統級快照:Timeshift
6.1 Timeshift 是什麼?
Timeshift 是一個系統級備份工具,類似 Windows 的系統還原點:
- ✅ 支持 Btrfs 原生快照
- ✅ 支持 rsync 增量備份
- ✅ 按計劃自動創建快照
- ✅ 可從 Live CD 恢復
- ✅ 可在同一硬盤或外部硬盤存儲
注意: Timeshift 主要備份系統文件,不建議備份用戶數據(/home 目錄)。
6.2 安裝與初始化
# Debian / Ubuntu
sudo apt install -y timeshift
# 初始化(rsync 模式,適合大多數文件系統)
sudo timeshift --create --comments "初始備份" --tags M
# 查看備份位置
sudo timeshift --list6.3 常用操作
# 創建手動快照
sudo timeshift --create --comments "更新前備份" --tags D
# 列出所有快照
sudo timeshift --list
# 恢復快照
sudo timeshift --restore
# 刪除快照
sudo timeshift --delete --snapshot '2026-06-15_08-00-01'
# 刪除所有快照(謹慎使用)
sudo timeshift --delete-all6.4 配置自動定時備份
# 編輯 Timeshift 配置
sudo nano /etc/timeshift/timeshift.json
# 常見配置項:
# backup_device_uuid: 備份設備 UUID
# schedule_monthly: 每月備份數量
# schedule_weekly: 每週備份數量
# schedule_daily: 每日備份數量
# schedule_hourly: 每小時備份數量
# exclude: 排除目錄列表典型排除列表:
{
"exclude": [
"/home/*",
"/root/*",
"/tmp/*",
"/var/log/*",
"/var/cache/*",
"/mnt/*",
"/media/*",
"/proc/*",
"/sys/*",
"/dev/*",
"/run/*",
"/var/lib/docker/*",
"node_modules",
".git"
]
}6.5 完整系統恢復流程
當系統無法啟動時:
- 用 Ubuntu Live CD/USB 啟動
- 安裝 Timeshift:bash
sudo add-apt-repository -y ppa:teejee2008/ppa sudo apt update sudo apt install timeshift - 掛載備份所在的分區
- 啟動 Timeshift,選擇備份恢復
- 重啟系統
七、自動化:crontab 定時任務
7.1 crontab 基礎語法
# 打開 crontab 編輯器
crontab -e
# 查看當前任務
crontab -l
# 刪除所有任務(謹慎)
crontab -r時間格式:
分 時 日 月 周 命令
* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └── 星期 (0-7,0=7=週日)
│ │ │ └─────── 月份 (1-12)
│ │ └──────────── 日期 (1-31)
│ └───────────────── 小時 (0-23)
└───────────────────── 分鐘 (0-59)7.2 常用示例
# 每天凌晨 2 點執行每日備份
0 2 * * * /root/scripts/borg-backup.sh
# 每天凌晨 3 點備份數據庫
0 3 * * * /root/scripts/mysql-backup.sh
# 每週日凌晨 4 點清理舊備份
0 4 * * 0 /root/scripts/backup-cleanup.sh
# 每小時檢查備份狀態(簡單健康檢查)
0 * * * * /root/scripts/check-backup-status.sh
# 每天凌晨 1 點執行完整系統備份
0 1 * * * /root/scripts/full-system-backup.sh
# 每週一凌晨 3 點執行大文件備份
0 3 * * 1 /root/scripts/big-files-backup.sh
# 每月 1 號凌晨 5 點歸檔
0 5 1 * * /root/scripts/monthly-archive.sh7.3 完整的 crontab 配置示例
# ================================================
# 備份任務配置
# ================================================
# 每日 BorgBackup 備份(凌晨 2:00)
0 2 * * * /root/scripts/borg-backup.sh >> /var/log/cron-backup.log 2>&1
# 每日數據庫備份(凌晨 3:00)
0 3 * * * /root/scripts/mysql-backup.sh >> /var/log/cron-mysql.log 2>&1
# 每日 Docker 數據卷備份(凌晨 3:30)
30 3 * * * /root/scripts/docker-backup.sh >> /var/log/cron-docker.log 2>&1
# 每週清理舊備份(週日凌晨 4:00)
0 4 * * 0 find /mnt/backup -type f -name "*.tar.gz" -mtime +30 -delete >> /var/log/cron-cleanup.log 2>&1
# 每日系統快照(凌晨 1:00)
0 1 * * * timeshift --create --comments "每日自動快照" --tags D >> /var/log/cron-timeshift.log 2>&1
# 每月歸檔(每月 1 號凌晨 5:00)
0 5 1 * * /root/scripts/monthly-archive.sh >> /var/log/cron-monthly.log 2>&1
# ================================================
# 監控與報告
# ================================================
# 每小時檢查磁盤空間
0 * * * * /root/scripts/check-disk-space.sh >> /var/log/cron-disk.log 2>&1八、異地容災方案
8.1 使用 rclone 同步到雲端
# 安裝 rclone
curl https://rclone.org/install.sh | sudo bash
# 配置遠程存儲
rclone config
# 同步備份目錄到 S3
rclone sync /mnt/backup/ s3:my-backup-bucket/backup/
# 同步到阿里雲 OSS
rclone sync /mnt/backup/ oss:my-backup-bucket/backup/
# 同步到 Backblaze B2
rclone sync /mnt/backup/ b2:my-backup-bucket/backup/
# 查看遠程文件
rclone ls s3:my-backup-bucket/backup/8.2 異地服務器備份
# 在備份服務器上準備好 SSH 免密鑰登錄
ssh-keygen -t rsa -b 4096
ssh-copy-id backupuser@remote-server.com
# 定時同步到異地服務器
rsync -avzh \
-e 'ssh -p 22' \
/mnt/backup/ \
backupuser@remote-server.com:/mnt/offsite-backup/8.3 完整的多層備份架構
VPS 服務器
│
├── 每日 rsync ─→ /mnt/backup/ 本地硬盤(快速恢復)
│
├── 每日 BorgBackup ─→ /mnt/borg-repo/ 增量備份(7 天/4 周/6 月)
│
├── 每日數據庫備份 ─→ /mnt/backup/databases/ (SQL 壓縮文件)
│
├── 每日 Docker 備份 ─→ /mnt/backup/docker/ (tar.gz)
│
└── 每週 rclone 同步 ─→ 雲對象存儲(S3/OSS)
│
└── 每月歸檔 ─→ 離線硬盤(冷存儲)九、備份驗證與測試
9.1 定期檢查備份完整性
# 檢查 BorgBackup 倉庫完整性
borg check /mnt/backup/my-borg-repo
# 檢查特定備份
borg check /mnt/backup/my-borg-repo::server1-2026-06-15
# 深度檢查(較慢,建議每月一次)
borg check --verify-data /mnt/backup/my-borg-repo
# 檢查 SQL 文件的完整性
gzip -t /mnt/backup/mysql/backup.sql.gz
# 或者解壓後檢查行數
gunzip -c /mnt/backup/mysql/backup.sql.gz | wc -l
# 檢查 tar 歸檔
tar -tzf /mnt/backup/docker/my-data.tar.gz > /dev/null && echo "文件完整"9.2 測試恢復流程
每月至少執行一次完整恢復測試:
# 1. 創建測試恢復目錄
mkdir -p /tmp/restore-test
# 2. 從 BorgBackup 中提取測試文件
cd /tmp/restore-test
borg extract /mnt/backup/my-borg-repo::server1-2026-06-14 \
home/user/test-file.txt
# 3. 驗證文件內容
cat home/user/test-file.txt
# 4. 測試數據庫恢復(在測試環境)
mysql -u root -ptest test_db < /mnt/backup/mysql/test-2026-06-14.sql
# 5. 測試 Docker 數據卷恢復
docker volume create test-restore
docker run --rm -v test-restore:/data -v /mnt/backup/docker:/backup \
ubuntu:24.04 tar xzf /backup/my-data-2026-06-14.tar.gz -C /
# 6. 清理測試文件
rm -rf /tmp/restore-test
docker volume rm test-restore9.3 監控磁盤空間
#!/bin/bash
# check-disk-space.sh
THRESHOLD=85 # 百分比閾值
BACKUP_DISK='/mnt/backup'
USAGE=$(df -h $BACKUP_DISK | tail -1 | awk '{print $5}' | tr -d '%')
if [ $USAGE -gt $THRESHOLD ]; then
echo "⚠️ 警告:$BACKUP_DISK 使用率已達 $USAGE%,超過閾值 $THRESHOLD%"
echo "建議清理舊備份或擴展存儲空間"
# 這裡可以添加郵件通知或其他告警
fi十、完整備份清單與最佳實踐
10.1 必須備份的清單
| 項目 | 路徑 | 頻率 | 保留時長 |
|---|---|---|---|
| 系統配置 | /etc | 每日 | 30 天 |
| 網站數據 | /var/www | 每日 | 90 天 |
| 用戶數據 | /home | 每日 | 永久 |
| 數據庫 | MySQL/Postgres | 每日 | 90 天 |
| Docker 數據卷 | /var/lib/docker/volumes | 每日 | 30 天 |
| 日誌 | /var/log | 每日 | 90 天 |
| 系統快照 | Timeshift | 每日/每週 | 30 天 |
| 完整鏡像 | VPS 快照 | 每週 | 4 周 |
10.2 備份清單 Checklist
10.3 常見錯誤與避免方法
| 錯誤 | 後果 | 避免方法 |
|---|---|---|
| 只備份不驗證 | 恢復時才發現備份損壞 | 定期執行恢復測試 |
| 備份在同一硬盤 | 硬盤損壞時一起丟失 | 使用獨立磁盤/異地存儲 |
| 備份路徑包含備份目錄 | 無限遞歸,耗盡磁盤 | 在腳本中排除備份目錄 |
| 沒有加密 | 數據洩露風險 | 使用 BorgBackup 加密或其他加密 |
| 備份未定期清理 | 磁盤空間被佔滿 | 設置 prune/過期策略 |
| 沒有測試恢復流程 | 緊急時不知道怎麼恢復 | 每月執行一次完整恢復練習 |
| 數據庫熱備份不一致 | 恢復後數據損壞 | 使用 mysqldump/pg_dump 等專用工具 |
結語
數據備份的本質是風險管理。你付出的是一些存儲空間和自動化工作時間,換來的是數據安全的保障。
記住三個原則:
- 自動化:讓備份自動運行,不要依賴人工操作
- 驗證:定期測試恢復流程,確保備份有效
- 冗餘:多位置、多介質存儲,不要把雞蛋放在一個籃子
現在就去設置你的備份! 數據只有在你失去它時才知道它有多珍貴。
推薦閱讀:
- 系統優化設置指南 - 優化你的 VPS 性能
- Docker Compose 實戰教程 - 容器化部署最佳實踐
- Fail2ban 防爆破配置 - 保護你的服務器免受暴力破解
💾 提示: 最好的備份策略是——已經實施的策略。不要等到數據丟失了才開始備份。
延伸阅读
免责声明
本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。