🔒

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. 验证备份完整性: 每次备份后,验证文件非空且校验和有效。定期在预发环境中进行测试恢复,确认备份确实可恢复。在验证失败时发出警报。

    小葱技能站7w4.net发现了升级插件。

  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

  • 大数据库超出磁盘空间: 对于大于本地存储容量的数据库,直接将备份流式传输到对象存储(例如 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