中小型 Drupal 站點:Backup Migrate + SVN 輕量級方案
模塊配置
- 安裝
backup_migrate 模塊。
- 設置排程:每日/每周、保留份數、壓縮格式 (gz)。
- 目標目錄:
sites/default/files/backup_migrate/scheduled/。
自動化腳本(每日 Cron 執行)
#!/bin/bash
# cron.sh - 放置站點根目錄,crontab: 0 0 * * * cd /www/web/html && bash cron.sh >> cron.log 2>&1
date # 開始時間
DRUSH_PHP=/usr/bin/php
export DRUSH_PHP
# 1. 執行 Drupal Cron 觸發備份
drush cron
# 2. SVN 管理備份文件(刪除舊、添加新、提交)
cd /www/web/html
svn st sites/default/files/backup_migrate/scheduled/ | grep '^!' | awk '{print $2}' | xargs -r svn delete --force
svn add sites/default/files/backup_migrate/scheduled/*
svn ci sites/default/files/backup_migrate/scheduled/ -m "auto backup $(date +%F)"
date # 結束時間
大型站點:MySQL 原生備份策略(分庫、壓縮、異地、驗證)
核心原則
- 邏輯備份:
mysqldump --single-transaction(InnoDB 熱備份,不加鎖)。
- 分庫並行:每庫獨立文件,便於單庫恢復、並行壓縮。
- 壓縮存儲:
gzip -9 最大壓縮比。
- 異地複製:備份完成後 rsync/scp 至異地存儲/雲對象存儲。
- 定期驗證:月度抽樣恢復演練,確保備份可用。
生產級 PHP 備份腳本
#!/usr/bin/php -q
$file.gz";
$ret = system($cmd, $code);
if ($code !== 0) {
mail($to, "Backup FAILED: $db on $hostname", "Command: $cmd\nExit: $code");
} else {
echo "Backed up $db\n";
}
}
// 異地同步(示例:rsync 到備份服務器)
system("rsync -avz --delete $bpath/$byear/$bmonth/$bday/ backup-server:/remote/backup/mysql/$byear/$bmonth/$bday/");
echo "All backups in $bpath\n";
Crontab 排程
[client]
user=backup
password=StrongRandomPass
host=localhost
備份保留策略示例