🔒

database-backup

👤 ҉Breeze🌔 📦 v1.0.0 ⭐ 4.3 ⬇️ 163 下載
🔒 IT運維與安全 免費

📖 技能介紹


name: database-backup slug: "database-backup" version: "1.0.0" displayName: "database-backup" summary: "使用全量、增量和時間點恢復策略建立、計劃並驗證資料庫備份。" description: 使用全量、增量和時間點恢復策略建立、計劃並驗證資料庫備份。 license: MIT metadata: author: AI Agent Skills Community version: 1.0.0


Database Backup

此技能使AI代理能夠在PostgreSQL、MySQL和MongoDB上規劃和執行資料庫備份策略。該代理選擇適當的備份型別(全量、增量、差異或時間點),生成帶壓縮和加密的備份指令碼,通過cron或類似工具配置自動化排程,定義保留策略,並通過恢復測試驗證備份完整性。

Workflow

  1. 評估備份需求: 確定資料庫型別、大小、可接受的資料丟失視窗(RPO)以及可接受的停機時間(RTO)。識別備份是否必須一致(應用級鎖或快照),以及資料庫是否可以容忍備份期間短暫鎖定。

  2. 選擇備份策略: 根據需求選擇合適的備份型別。全量備份捕獲整個資料庫,最簡單恢復但建立速度最慢。增量備份僅捕獲自上次備份以來的更改,節省時間和儲存空間。差異備份捕獲自上次全量備份以來的更改,提供中間平衡。時間點恢復(PITR)使用預寫日誌或oplog恢復到任意時刻,提供最低的RPO。

  3. 生成備份指令碼: 生成呼叫目標資料庫正確備份工具的shell指令碼。包括壓縮(gzip、lz4或zstd)、可選加密(GPG或OpenSSL)、時間戳檔名和帶退出碼的錯誤處理。指令碼應記錄輸出以供監控。

  4. 配置排程與保留策略: 使用cron、systemd定時器或任務排程器設定自動化執行。定義保留策略(例如,保留7天每日備份、4周每週備份、12月每月備份),並實現過期備份清理以管理儲存使用情況。

  5. 驗證備份完整性: 每次備份後,驗證檔案非空且校驗和有效。定期在預發環境中進行測試恢復,確認備份確實可恢復。在驗證失敗時發出警報。

  6. 記錄與監控: 記錄備份計劃、保留策略、儲存位置和恢復流程。使用Prometheus、Datadog或簡單郵件通知等工具設定錯過備份或備份失敗的監控告警。

支援的技術

  • PostgreSQL: pg_dump, pg_basebackup, WAL歸檔用於PITR
  • MySQL: mysqldump, mysqlpump, Percona XtraBackup, 二進位制日誌用於PITR
  • MongoDB: mongodump, mongorestore, 檔案系統快照, oplog用於PITR
  • 壓縮: gzip, lz4, zstd, pigz
  • 加密: GPG, OpenSSL AES-256
  • 儲存: 本地磁碟、AWS S3、Google Cloud Storage、Azure Blob Storage

Usage

向代理提供您的資料庫型別、名稱和連線詳細資訊。指定您的RPO/RTO要求、首選儲存目的地以及是否需要加密。代理將生成完整的備份解決方案,包括指令碼、排程、保留策略和驗證步驟。

Examples

示例 1:使用Cron計劃的PostgreSQL全量備份

請求: 設定一個夜間PostgreSQL資料庫的全量備份,保留30天,壓縮並上傳到本地備份目錄。

#!/usr/bin/env bash
# pg_backup.sh — Nightly PostgreSQL full backup
set -euo pipefail

DB_NAME="production"
DB_USER="backup_user"
BACKUP_DIR="/var/backups/postgresql"
RETENTION_DAYS=30
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"

mkdir -p "$BACKUP_DIR"

echo "[$(date)] Starting backup of database '${DB_NAME}'..."
pg_dump -U "$DB_USER" -h localhost -Fc "$DB_NAME" | gzip > "$BACKUP_FILE"

# Verify the backup file is non-empty
if [ ! -s "$BACKUP_FILE" ]; then
    echo "[$(date)] ERROR: Backup file is empty. Aborting." >&2
    exit 1
fi

FILE_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo "[$(date)] Backup complete: ${BACKUP_FILE} (${FILE_SIZE})"

# Clean up backups older than retention period
find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +${RETENTION_DAYS} -delete
echo "[$(date)] Expired backups removed (older than ${RETENTION_DAYS} days)."

Cron條目(每天凌晨2:00執行):

0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1

示例 2:MongoDB備份與恢復流程

請求: 備份MongoDB副本集並記錄恢復流程。

備份指令碼:

#!/usr/bin/env bash
# mongo_backup.sh — MongoDB replica set backup
set -euo pipefail

MONGO_URI="mongodb://backup_user:secret@rs1.example.com:27017,rs2.example.com:27017/admin?replicaSet=rs0"
BACKUP_DIR="/var/backups/mongodb"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DUMP_DIR="${BACKUP_DIR}/dump_${TIMESTAMP}"

mkdir -p "$BACKUP_DIR"

echo "[$(date)] Starting mongodump..."
mongodump --uri="$MONGO_URI" --oplog --out="$DUMP_DIR"

# Compress the dump directory
tar -czf "${DUMP_DIR}.tar.gz" -C "$BACKUP_DIR" "dump_${TIMESTAMP}"
rm -rf "$DUMP_DIR"

echo "[$(date)] Backup complete: ${DUMP_DIR}.tar.gz"

# Retain only the last 14 backups
ls -t ${BACKUP_DIR}/dump_*.tar.gz | tail -n +15 | xargs -r rm --

恢復流程:

# 1. Extract the backup archive
tar -xzf /var/backups/mongodb/dump_20250115_020000.tar.gz -C /tmp/

# 2. Restore to the target MongoDB instance
mongorestore --uri="mongodb://admin:secret@localhost:27017" \
  --oplogReplay --drop /tmp/dump_20250115_020000/

# 3. Verify collections and document counts
mongosh --eval "db.adminCommand({listDatabases: 1})"

最佳實踐

  • 定期測試恢復 — 從未恢復過的備份是不可信的。安排每月一次的預發環境恢復演練。
  • 使用GPG或AES-256加密靜態和傳輸中的備份,尤其是在異地儲存或雲端儲存時。切勿將加密金鑰與備份一同存放。
  • 使用--oplog標誌(MongoDB)或WAL歸檔(PostgreSQL) 啟用時間點恢復,顯著減少潛在資料丟失。
  • 將備份儲存在獨立的故障域中 — 不同伺服器、可用區或雲區域,以防止單個基礎設施故障同時破壞資料庫和其備份。
  • 使用告警監控備份作業 — 沉默不是成功。對缺失備份、零位元組檔案或校驗和不匹配發出告警。
  • 記錄完整的恢復流程 包括確切命令、預期時間及責任人,以便在壓力下恢復時無需猜測。

Edge Cases

7w4.net小蔥技能。

  • 大數據庫超出磁碟空間: 對於大於本地儲存容量的資料庫,直接將備份流式傳輸到物件儲存(例如 pg_dump | gzip | aws s3 cp - s3://bucket/backup.gz)以避免本地磁碟耗盡。
  • 備份期間活躍寫入流量: 使用帶有--snapshot的pg_dump或MongoDB的--oplog獲取一致的時間點備份,即使在持續寫入時也可使用。對於MySQL,使用Percona XtraBackup進行InnoDB熱備份而無需鎖定。
  • 加密資料庫的備份: 如果啟用了透明資料加密(TDE),確保加密金鑰單獨備份,並且備份過程能捕獲可恢復格式的加密資料。
  • 跨區域複製延遲: 從副本備份時,在開始備份前驗證複製延遲為零或接近零,以避免捕獲陳舊資料。
  • 備份憑證輪換: 將憑證儲存在金鑰管理器(Vault、AWS Secrets Manager)中而不是硬編碼在指令碼中,並確保備份指令碼能處理憑證輪換而無需手動更新。

🤖 AI 評測

這個Skill提供了全面的資料庫備份知識指南,內容覆蓋主流資料庫型別,包含實用的指令碼示例和配置建議,文件質量良好。但它更像一本操作手冊而非可直接使用的工具——缺少可執行的備份指令碼和配置檔案,使用者需要根據文件自行開發實現程式碼。如需開箱即用的備份解決方案,此Skill需補充可部署的實際指令碼檔案。總體而言,作為知識參考很有價值,作為可執行工具則稍顯不足。

📊 多維度評分

適應性4.3
規範性4.3
有效性4.5
可靠性3.8
可信度4.7

📁 包含檔案 (3 個)

📄 SKILL.md 7.1 KB
📄 _meta.json 134 B
📄 _skillhub_meta.json 138 B