mcpField
B
backup-retention-policy

backup-retention-policy

github.com/dengineproblem云与 DevOps62 次安装
代码仓库

关于 backup-retention-policy

面向负责数据生命周期和灾难恢复的团队的备份保留策略技能,涵盖存储层级、云生命周期示例、数据库备份、合规、恢复目标、验证、测试与告警。

主要功能

  1. 013-2-1-1-0 备份规则
  2. 02存储层级与保留期限
  3. 03云生命周期策略示例
  4. 04数据库备份与轮换
  5. 05合规与 RTO/RPO 规划
  6. 06策略验证与测试

适用场景

  1. 01制定备份保留计划
  2. 02规划灾难恢复目标
  3. 03按合规要求检查策略
  4. 04安排恢复测试与告警

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dengineproblem/agents-monorepo --skill backup-retention-policy

安装后在 Claude Code 中输入/backup-retention-policy确认已加载。

详细介绍

Эксперт по политике хранения резервных копий

Эксперт по управлению жизненным циклом данных и восстановлению после сбоев.

Правило 3-2-1-1-0

  • 3 копии важных данных(1 份主要副本 + 2 份备份)
  • 2 种不同类型的存储介质
  • 1 份异地/云端备份
  • 1 份离线/不可变备份
  • 0 个测试后发现的错误

存储层级

层级访问频率时长成本
热存储频繁0-30 天$$$
温存储定期30-90 天$$
冷存储很少90 天-7 年$
归档长期7 年以上¢

AWS S3 生命周期策略

{
  "Rules": [
    {
      "ID": "BackupLifecycle",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "backups/"
      },
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        },
        {
          "Days": 90,
          "StorageClass": "GLACIER"
        },
        {
          "Days": 365,
          "StorageClass": "DEEP_ARCHIVE"
        }
      ],
      "Expiration": {
        "Days": 2555
      },
      "NoncurrentVersionTransitions": [
        {
          "NoncurrentDays": 30,
          "StorageClass": "GLACIER"
        }
      ],
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 365
      }
    }
  ]
}

Azure Blob 生命周期

{
  "rules": [
    {
      "name": "backupRetention",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "tierToCool": {"daysAfterModificationGreaterThan": 30},
            "tierToArchive": {"daysAfterModificationGreaterThan": 90},
            "delete": {"daysAfterModificationGreaterThan": 2555}
          },
          "snapshot": {
            "delete": {"daysAfterCreationGreaterThan": 90}
          }
        },
        "filters": {
          "blobTypes": ["blockBlob"],
          "prefixMatch": ["backups/"]
        }
      }
    }
  ]
}

备份轮换脚本

#!/bin/bash
BACKUP_DIR="/var/backups"
DAILY_RETENTION=7
WEEKLY_RETENTION=4
MONTHLY_RETENTION=12

# Удаление ежедневных старше 7 дней
find "$BACKUP_DIR/daily" -type f -mtime +$DAILY_RETENTION -delete

# Удаление еженедельных старше 4 недель
find "$BACKUP_DIR/weekly" -type f -mtime +$((WEEKLY_RETENTION * 7)) -delete

# Удаление ежемесячных старше 12 месяцев
find "$BACKUP_DIR/monthly" -type f -mtime +$((MONTHLY_RETENTION * 30)) -delete

# Логирование
echo "$(date): Rotation completed" >> /var/log/backup_rotation.log

PostgreSQL 备份

#!/bin/bash
DB_NAME="production"
BACKUP_DIR="/var/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)

# Полный бэкап
pg_dump -Fc -f "$BACKUP_DIR/full_$DATE.dump" $DB_NAME

# Инкрементальный с WAL
pg_basebackup -D "$BACKUP_DIR/base_$DATE" -Ft -z -P

# Архивация WAL логов
archive_command = 'cp %p /var/backups/wal/%f'

MySQL 备份

#!/bin/bash
MYSQL_USER="backup_user"
MYSQL_PASS="secure_password"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

# Полный бэкап
mysqldump --user=$MYSQL_USER --password=$MYSQL_PASS \
    --all-databases --single-transaction \
    --routines --triggers --events \
    | gzip > "$BACKUP_DIR/full_$DATE.sql.gz"

# Инкрементальный с binlog
mysqlbinlog --read-from-remote-server \
    --host=localhost --user=$MYSQL_USER \
    --raw --stop-never mysql-bin.000001

合规性要求

标准要求
GDPR删除权、数据最小化
SOX财务记录保存 7 年
HIPAA医疗数据保存 6 年
PCI DSS审计记录至少保存 1 年

RTO/RPO 规划

Критические системы:
  RPO: 1 час
  RTO: 4 часа
  Стратегия: Синхронная репликация + горячий standby

Бизнес-системы:
  RPO: 4 часа
  RTO: 24 часа
  Стратегия: Асинхронная репликация + теплый standby

Архивные системы:
  RPO: 24 часа
  RTO: 72 часа
  Стратегия: Ежедневные бэкапы + холодное хранение

使用 Python 验证策略

from datetime import datetime, timedelta
from typing import List, Dict

class BackupRetentionValidator:
    def __init__(self, retention_policy: Dict):
        self.policy = retention_policy

    def validate_backup(self, backup_date: datetime, backup_type: str) -> bool:
        """Проверка соответствия бэкапа политике хранения"""
        retention_days = self.policy.get(backup_type, {}).get('retention_days', 0)
        expiry_date = backup_date + timedelta(days=retention_days)
        return datetime.now() < expiry_date

    def get_expired_backups(self, backups: List[Dict]) -> List[Dict]:
        """Получить список просроченных бэкапов"""
        expired = []
        for backup in backups:
            if not self.validate_backup(backup['date'], backup['type']):
                expired.append(backup)
        return expired

    def calculate_storage_forecast(self, daily_backup_size_gb: float) -> Dict:
        """Прогноз использования хранилища"""
        total_storage = 0
        for backup_type, config in self.policy.items():
            retention = config.get('retention_days', 0)
            frequency = config.get('frequency_days', 1)
            copies = retention // frequency
            total_storage += copies * daily_backup_size_gb

        return {
            'total_gb': total_storage,
            'monthly_cost_estimate': total_storage * 0.023  # S3 Standard pricing
        }

测试计划

测试类型频率覆盖范围
抽样恢复每月10% 的数据
完整恢复每季度关键系统
DR 演练每年完整场景
策略审计每年所有策略

监控与告警

Алерты:
  backup_failed:
    severity: critical
    notification: [pagerduty, slack]

  backup_size_anomaly:
    threshold: 20%
    severity: warning

  retention_violation:
    severity: high
    action: auto_remediate

  storage_threshold:
    threshold: 80%
    severity: warning

最佳实践

  1. 测试恢复 — 未经测试的备份等于没有备份
  2. 加密数据 — 静态数据使用 AES-256 加密
  3. 版本控制 — 保存多个版本
  4. 地理分布 — 至少覆盖 2 个区域
  5. 不可变存储 — 防范 ransomware
  6. 记录流程 — 为 DR 编写运行手册

评论

支持 Markdown