跳轉到內容

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

VPS 數據備份與恢復

💡 重要提醒: 沒有備份策略的服務器就是在裸奔。硬盤故障、誤操作、黑客入侵,任何一項都可能讓幾個月甚至幾年的工作成果瞬間消失。備份是你唯一的保險。

本文將帶你從最簡單的 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 基礎語法

bash
# 基本格式
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 實用示例

bash
# 完整備份 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 備份腳本(入門級)

bash
#!/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

保存後賦權並測試:

bash
chmod +x backup-daily.sh
./backup-daily.sh

三、企業級方案:BorgBackup

3.1 為什麼選擇 BorgBackup?

特性rsyncBorgBackup
增量備份✅ 簡單增量✅ 去重增量(僅存變更塊)
壓縮✅ 傳輸時✅ 存儲時 + 傳輸時
加密❌(依賴 SSH)✅ AES-256 端到端加密
去重✅ 跨備份全局去重
快照✅ 自動創建時間點快照
恢復點單個最新版本多個歷史版本

3.2 安裝 BorgBackup

bash
# Debian / Ubuntu
sudo apt update && sudo apt install -y borgbackup

# CentOS / RHEL
sudo dnf install -y epel-release
sudo dnf install -y borgbackup

# 驗證安裝
borg --version

3.3 初始化備份倉庫

bash
# 初始化本地倉庫(會提示設置密碼)
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 創建備份

bash
# 創建一個備份快照
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 /opt

3.5 查看和管理備份

bash
# 列出所有備份
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-15

3.6 恢復文件

bash
# 方法一:掛載備份(推薦)
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-15

3.7 刪除舊備份

bash
# 刪除指定備份
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-repo

3.8 完整的 BorgBackup 自動化腳本

bash
#!/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

bash
chmod 700 borg-backup.sh
chown root:root borg-backup.sh

四、數據庫備份

4.1 MySQL / MariaDB 備份

bash
# 導出所有數據庫(帶時間戳)
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 備份腳本:

bash
#!/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 -delete

4.2 PostgreSQL 備份

bash
# 備份所有數據庫
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 postgres

4.3 SQLite 備份

bash
# 方式一:使用 .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 備份

bash
# 完整備份
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.gz

4.5 Redis 備份

bash
# 觸發 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 數據卷手動備份

bash
# 查看所有數據卷
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 工具

bash
# 安裝 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 自動化備份所有容器

bash
#!/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.txt

5.4 使用 docker-compose 備份

bash
# 停止容器(避免寫入不一致)
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 安裝與初始化

bash
# Debian / Ubuntu
sudo apt install -y timeshift

# 初始化(rsync 模式,適合大多數文件系統)
sudo timeshift --create --comments "初始備份" --tags M

# 查看備份位置
sudo timeshift --list

6.3 常用操作

bash
# 創建手動快照
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-all

6.4 配置自動定時備份

bash
# 編輯 Timeshift 配置
sudo nano /etc/timeshift/timeshift.json

# 常見配置項:
# backup_device_uuid: 備份設備 UUID
# schedule_monthly: 每月備份數量
# schedule_weekly: 每週備份數量
# schedule_daily: 每日備份數量
# schedule_hourly: 每小時備份數量
# exclude: 排除目錄列表

典型排除列表:

json
{
  "exclude": [
    "/home/*",
    "/root/*",
    "/tmp/*",
    "/var/log/*",
    "/var/cache/*",
    "/mnt/*",
    "/media/*",
    "/proc/*",
    "/sys/*",
    "/dev/*",
    "/run/*",
    "/var/lib/docker/*",
    "node_modules",
    ".git"
  ]
}

6.5 完整系統恢復流程

當系統無法啟動時:

  1. 用 Ubuntu Live CD/USB 啟動
  2. 安裝 Timeshift:
    bash
    sudo add-apt-repository -y ppa:teejee2008/ppa
    sudo apt update
    sudo apt install timeshift
  3. 掛載備份所在的分區
  4. 啟動 Timeshift,選擇備份恢復
  5. 重啟系統

七、自動化:crontab 定時任務

7.1 crontab 基礎語法

bash
# 打開 crontab 編輯器
crontab -e

# 查看當前任務
crontab -l

# 刪除所有任務(謹慎)
crontab -r

時間格式:

分  時  日  月  周  命令
*   *   *   *   *   command-to-execute
│   │   │   │   │
│   │   │   │   └── 星期 (0-7,0=7=週日)
│   │   │   └─────── 月份 (1-12)
│   │   └──────────── 日期 (1-31)
│   └───────────────── 小時 (0-23)
└───────────────────── 分鐘 (0-59)

7.2 常用示例

bash
# 每天凌晨 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.sh

7.3 完整的 crontab 配置示例

cron
# ================================================
# 備份任務配置
# ================================================

# 每日 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 同步到雲端

bash
# 安裝 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 異地服務器備份

bash
# 在備份服務器上準備好 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 定期檢查備份完整性

bash
# 檢查 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 測試恢復流程

每月至少執行一次完整恢復測試:

bash
# 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-restore

9.3 監控磁盤空間

bash
#!/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 等專用工具

結語

數據備份的本質是風險管理。你付出的是一些存儲空間和自動化工作時間,換來的是數據安全的保障。

記住三個原則:

  1. 自動化:讓備份自動運行,不要依賴人工操作
  2. 驗證:定期測試恢復流程,確保備份有效
  3. 冗餘:多位置、多介質存儲,不要把雞蛋放在一個籃子

現在就去設置你的備份! 數據只有在你失去它時才知道它有多珍貴。

推薦閱讀:


💾 提示: 最好的備份策略是——已經實施的策略。不要等到數據丟失了才開始備份。


延伸阅读

免责声明

本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。

最後更新於: