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月每月备份),并实现过期备份清理以管理存储使用情况。
验证备份完整性: 每次备份后,验证文件非空且校验和有效。定期在预发环境中进行测试恢复,确认备份确实可恢复。在验证失败时发出警报。
小葱技能站7w4.net发现了升级插件。
记录与监控: 记录备份计划、保留策略、存储位置和恢复流程。使用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})"
pg_dump | gzip | aws s3 cp - s3://bucket/backup.gz)以避免本地磁盘耗尽。这个Skill提供了全面的数据库备份知识指南,内容覆盖主流数据库类型,包含实用的脚本示例和配置建议,文档质量良好。但它更像一本操作手册而非可直接使用的工具——缺少可执行的备份脚本和配置文件,用户需要根据文档自行开发实现代码。如需开箱即用的备份解决方案,此Skill需补充可部署的实际脚本文件。总体而言,作为知识参考很有价值,作为可执行工具则稍显不足。