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
此技能使AI代理能夠在PostgreSQL、MySQL和MongoDB上規劃和執行資料庫備份策略。該代理選擇適當的備份型別(全量、增量、差異或時間點),生成帶壓縮和加密的備份指令碼,通過cron或類似工具配置自動化排程,定義保留策略,並通過恢復測試驗證備份完整性。
評估備份需求: 確定資料庫型別、大小、可接受的資料丟失視窗(RPO)以及可接受的停機時間(RTO)。識別備份是否必須一致(應用級鎖或快照),以及資料庫是否可以容忍備份期間短暫鎖定。
選擇備份策略: 根據需求選擇合適的備份型別。全量備份捕獲整個資料庫,最簡單恢復但建立速度最慢。增量備份僅捕獲自上次備份以來的更改,節省時間和儲存空間。差異備份捕獲自上次全量備份以來的更改,提供中間平衡。時間點恢復(PITR)使用預寫日誌或oplog恢復到任意時刻,提供最低的RPO。
生成備份指令碼: 生成呼叫目標資料庫正確備份工具的shell指令碼。包括壓縮(gzip、lz4或zstd)、可選加密(GPG或OpenSSL)、時間戳檔名和帶退出碼的錯誤處理。指令碼應記錄輸出以供監控。
配置排程與保留策略: 使用cron、systemd定時器或任務排程器設定自動化執行。定義保留策略(例如,保留7天每日備份、4周每週備份、12月每月備份),並實現過期備份清理以管理儲存使用情況。
驗證備份完整性: 每次備份後,驗證檔案非空且校驗和有效。定期在預發環境中進行測試恢復,確認備份確實可恢復。在驗證失敗時發出警報。
記錄與監控: 記錄備份計劃、保留策略、儲存位置和恢復流程。使用Prometheus、Datadog或簡單郵件通知等工具設定錯過備份或備份失敗的監控告警。
向代理提供您的資料庫型別、名稱和連線詳細資訊。指定您的RPO/RTO要求、首選儲存目的地以及是否需要加密。代理將生成完整的備份解決方案,包括指令碼、排程、保留策略和驗證步驟。
請求: 設定一個夜間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
請求: 備份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})"
7w4.net小蔥技能。
pg_dump | gzip | aws s3 cp - s3://bucket/backup.gz)以避免本地磁碟耗盡。這個Skill提供了全面的資料庫備份知識指南,內容覆蓋主流資料庫型別,包含實用的指令碼示例和配置建議,文件質量良好。但它更像一本操作手冊而非可直接使用的工具——缺少可執行的備份指令碼和配置檔案,使用者需要根據文件自行開發實現程式碼。如需開箱即用的備份解決方案,此Skill需補充可部署的實際指令碼檔案。總體而言,作為知識參考很有價值,作為可執行工具則稍顯不足。