backup-retention-policy
27
总安装量
4
周安装量
#13760
全站排名
安装命令
npx skills add https://github.com/dengineproblem/agents-monorepo --skill backup-retention-policy
Agent 安装分布
github-copilot
3
gemini-cli
2
replit
2
codebuddy
2
codex
2
Skill 文档
Backup Retention Policy Expert
ÐкÑпеÑÑ Ð¿Ð¾ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð·Ð½ÐµÐ½Ð½Ñм Ñиклом даннÑÑ Ð¸ воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле Ñбоев.
ÐÑавило 3-2-1-1-0
- 3 копии важнÑÑ Ð´Ð°Ð½Ð½ÑÑ (1 оÑÐ½Ð¾Ð²Ð½Ð°Ñ + 2 ÑезеÑвнÑе)
- 2 ÑазлиÑнÑÑ Ñипа ноÑиÑелей
- 1 внеÑнÑÑ/облаÑÐ½Ð°Ñ ÑезеÑÐ²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ
- 1 авÑономнаÑ/неизменÑÐµÐ¼Ð°Ñ ÑезеÑÐ²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ
- 0 оÑибок поÑле ÑеÑÑиÑованиÑ
УÑовни Ñ ÑанениÑ
| УÑÐ¾Ð²ÐµÐ½Ñ | ÐоÑÑÑп | ÐеÑиод | СÑоимоÑÑÑ |
|---|---|---|---|
| ÐоÑÑÑий | ЧаÑÑÑй | 0-30 дней | $$$ |
| ТеплÑй | ÐеÑиодиÑеÑкий | 30-90 дней | $$ |
| ХолоднÑй | Редкий | 90 дней-7 Ð»ÐµÑ | $ |
| ÐÑÑ Ð¸Ð² | ÐолгоÑÑоÑнÑй | 7+ Ð»ÐµÑ | ¢ |
AWS S3 Lifecycle Policy
{
"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 Lifecycle
{
"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 Backup
#!/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 Backup
#!/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
Compliance Requirements
| СÑандаÑÑ | ТÑебование |
|---|---|
| GDPR | ÐÑаво на Ñдаление, минимизаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ |
| SOX | 7 Ð»ÐµÑ Ð´Ð»Ñ ÑинанÑовÑÑ Ð·Ð°Ð¿Ð¸Ñей |
| HIPAA | 6 Ð»ÐµÑ Ð´Ð»Ñ Ð¼ÐµÐ´Ð¸ÑинÑÐºÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ |
| PCI DSS | 1 год минимÑм Ð´Ð»Ñ Ð°ÑдиÑа |
RTO/RPO Planning
ÐÑиÑиÑеÑкие ÑиÑÑемÑ:
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
ÐÑÑÑие пÑакÑики
- ТеÑÑиÑÑйÑе воÑÑÑановление â бÑкап без ÑеÑÑа = Ð½ÐµÑ Ð±Ñкапа
- ШиÑÑÑйÑе даннÑе â AES-256 Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² покое
- ÐеÑÑиониÑование â Ñ ÑаниÑе неÑколÑко веÑÑий
- ÐеогÑаÑиÑеÑкое ÑаÑпÑеделение â минимÑм 2 Ñегиона
- Immutable storage â заÑиÑа Ð¾Ñ ransomware
- ÐокÑменÑиÑÑйÑе пÑоÑедÑÑÑ â runbooks Ð´Ð»Ñ DR