Backup e Disaster Recovery - C-Suite
Este documento descreve os procedimentos de backup e disaster recovery para o ecossistema C-Suite.
Visão Geral
O script scripts/backup_database.py fornece funcionalidade completa de backup e restore de bancos de dados MySQL/MariaDB.
Características
- ✅ Backup automático de bancos MySQL/MariaDB
- ✅ Compressão automática (gzip)
- ✅ Retenção configurável
- ✅ Restore de backups
- ✅ Integração com sistema de notificações
- ✅ Logging completo
Uso
Backup Básico
python scripts/backup_database.py --database csuite
Backup com Opções
python scripts/backup_database.py \
--database csuite \
--backup-dir /backups \
--retention-days 30 \
--cleanup
Listar Backups
python scripts/backup_database.py --database csuite --list
Restore
python scripts/backup_database.py \
--database csuite \
--restore /backups/csuite_backup_20251201_120000.sql.gz
Configuração
Variáveis de Ambiente
# Database configuration (usa core_config)
CSUITE_DB_HOST=localhost
CSUITE_DB_PORT=3306
CSUITE_DB_USER=backup_user
CSUITE_DB_PASSWORD=password
CSUITE_DB_NAME=csuite
# Backup configuration
BACKUP_DIR=/backups
BACKUP_DATABASE=csuite
BACKUP_RETENTION_DAYS=30
Permissões de Usuário
Crie usuário de backup no MySQL:
CREATE USER 'backup_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON csuite.* TO 'backup_user'@'%';
FLUSH PRIVILEGES;
Agendamento Automático
Cron
Adicione ao crontab:
# Backup diário às 2:00 AM
0 2 * * * /usr/bin/python3 /path/to/scripts/backup_database.py --database csuite --cleanup >> /var/log/backup.log 2>&1
Systemd Timer
Crie backup-database.service:
[Unit]
Description=Database Backup
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /path/to/scripts/backup_database.py --database csuite --cleanup
User=backup
Environment="BACKUP_DIR=/backups"
E backup-database.timer:
[Unit]
Description=Daily Database Backup
Requires=backup-database.service
[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
[Install]
WantedBy=timers.target
Ative o timer:
sudo systemctl enable backup-database.timer
sudo systemctl start backup-database.timer
Estratégias de Backup
Backup Completo Diário
# Backup completo todos os dias
0 2 * * * /usr/bin/python3 /path/to/scripts/backup_database.py --database csuite --cleanup
Backup Incremental
Para backups incrementais, use mysqldump com --incremental ou configure MySQL binary logs.
Backup de Múltiplos Bancos
for db in csuite core staging; do
python scripts/backup_database.py --database $db --cleanup
done
Disaster Recovery
Plano de Recuperação
- Identificar ponto de restauração: Determine qual backup usar
- Parar serviços: Pare todos os serviços que usam o banco
- Restaurar backup: Execute restore do backup
- Verificar integridade: Verifique se dados estão corretos
- Reiniciar serviços: Reinicie serviços gradualmente
- Monitorar: Monitore logs e métricas
Procedimento de Restore
# 1. Parar serviços
docker service scale csuite-api=0
docker service scale 4c-suite=0
# 2. Restaurar backup
python scripts/backup_database.py \
--database csuite \
--restore /backups/csuite_backup_20251201_120000.sql.gz
# 3. Verificar
mysql -u root -p csuite -e "SELECT COUNT(*) FROM policies;"
# 4. Reiniciar serviços
docker service scale csuite-api=1
docker service scale 4c-suite=1
Teste de Restore
Execute testes periódicos de restore:
# Criar banco de teste
mysql -u root -p -e "CREATE DATABASE csuite_test;"
# Restaurar backup no banco de teste
python scripts/backup_database.py \
--database csuite_test \
--restore /backups/csuite_backup_20251201_120000.sql.gz
# Verificar integridade
mysql -u root -p csuite_test -e "SELECT COUNT(*) FROM policies;"
Monitoramento
Verificar Backups
# Listar backups
python scripts/backup_database.py --database csuite --list
# Verificar tamanho
du -sh /backups/*
# Verificar idade
find /backups -name "*.sql.gz" -mtime +7
Alertas
O script envia alertas críticos quando backup falha:
from common.common_notifications import send_critical_alert
# Alertas automáticos em caso de falha
Configure alertas para:
- Backup falhou
- Backup não executado há X dias
- Espaço em disco baixo
- Backup muito grande/pequeno
Best Practices
- Backup regular: Execute backups diários no mínimo
- Retenção adequada: Mantenha backups por pelo menos 30 dias
- Teste restore: Teste restore regularmente
- Offsite backup: Copie backups para localização remota
- Monitoramento: Configure alertas para falhas de backup
- Documentação: Documente procedimentos de restore
- Automação: Automatize tanto quanto possível
Backup Offsite
S3 (AWS)
# Upload para S3 após backup
aws s3 cp /backups/csuite_backup_*.sql.gz s3://backup-bucket/csuite/
rsync
# Sincronizar com servidor remoto
rsync -avz /backups/ user@remote-server:/backups/