backup-retention-policy

安装量: 44
排名: #16794

安装

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

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

返回排行榜