💾 Guia de Backup e Restore - CSuite
Versão: 1.0
Última Atualização: 2025-01-02
Responsável: Equipe de DevOps e Operações
📋 Índice
- Visão Geral
- Estratégia de Backup
- Backup de Banco de Dados
- Backup de Configurações
- Backup de Logs
- Restore
- Testes de Restore
- Automação
🎯 Visão Geral
Este guia descreve os procedimentos de backup e restore para o ecossistema CSuite, garantindo recuperação de dados em caso de falhas.
Objetivos
- Proteção de Dados: Garantir que dados não sejam perdidos
- Recuperação Rápida: Restaurar dados rapidamente quando necessário
- Rastreabilidade: Manter histórico de backups
- Conformidade: Atender requisitos de retenção
Princípios
- Backup Automático: Backups executados automaticamente
- Backup Regular: Backups diários + mensais
- Testes Regulares: Testar restore trimestralmente
- Offsite Backup: Backups em localização separada (planejado)
📦 Estratégia de Backup
Tipos de Backup
1. Backup Completo (Full):
- Todos os dados
- Executado diariamente
- Retenção: 30 dias
2. Backup Incremental:
- Apenas mudanças desde último backup
- Executado a cada 6 horas (planejado)
- Retenção: 7 dias
3. Backup Mensal:
- Backup completo no primeiro dia do mês
- Retenção: 12 meses
Frequência
Banco de Dados:
- Diário: Backup completo às 02:00 AM
- Mensal: Backup completo no dia 1º às 02:00 AM
- Antes de Deploy: Backup antes de releases importantes
Configurações:
- Diário: Backup de configurações
- Antes de Mudanças: Backup antes de alterações
Logs:
- Semanal: Backup de logs importantes
- Retenção: Conforme política de retenção
🗄️ Backup de Banco de Dados
Backup Manual
MySQL:
# Backup completo
mysqldump -u root -p --single-transaction --routines --triggers \
--all-databases > backup_$(date +%Y%m%d_%H%M%S).sql
# Backup de banco específico
mysqldump -u root -p --single-transaction --routines --triggers \
csuite > backup_csuite_$(date +%Y%m%d_%H%M%S).sql
# Backup comprimido
mysqldump -u root -p --single-transaction --routines --triggers \
csuite | gzip > backup_csuite_$(date +%Y%m%d_%H%M%S).sql.gz
Docker:
# Backup de container MySQL
docker exec csuite-mysql_mysql.1.xxx mysqldump -u root -p \
--single-transaction --routines --triggers csuite > backup.sql
Backup Automatizado
Script de Backup:
#!/bin/bash
# backup_mysql.sh
BACKUP_DIR="/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
# Criar diretório se não existir
mkdir -p $BACKUP_DIR
# Backup
docker exec csuite-mysql_mysql.1.xxx mysqldump -u root -p$MYSQL_ROOT_PASSWORD \
--single-transaction --routines --triggers csuite | gzip > \
$BACKUP_DIR/backup_csuite_$DATE.sql.gz
# Remover backups antigos
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Backup completed: backup_csuite_$DATE.sql.gz"
Cron Job:
# Adicionar ao crontab
# Backup diário às 02:00 AM
0 2 * * * /path/to/backup_mysql.sh >> /var/log/backup.log 2>&1
Verificação de Backup
Verificar integridade:
# Verificar se arquivo existe e não está vazio
ls -lh backup_csuite_*.sql.gz
# Verificar conteúdo (sem restaurar)
zcat backup_csuite_20250102_020000.sql.gz | head -20
# Verificar tamanho
du -h backup_csuite_*.sql.gz
⚙️ Backup de Configurações
Configurações a Fazer Backup
Docker:
- docker-stack.yml files
- Secrets do Docker Swarm
- Configs do Docker Swarm
Aplicação:
- Arquivos .env (sem secrets)
- Configurações de serviços
- Scripts de deploy
Infraestrutura:
- Configurações de rede
- Firewall rules
- SSL certificates
Procedimento
Backup de Configurações:
#!/bin/bash
# backup_configs.sh
BACKUP_DIR="/backups/configs"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR/configs_$DATE
# Backup de docker-stack files
cp -r csuite-*/docker-stack.yml $BACKUP_DIR/configs_$DATE/
# Backup de scripts
cp -r scripts/ $BACKUP_DIR/configs_$DATE/
# Backup de documentação importante
cp -r docs/operations/*.md $BACKUP_DIR/configs_$DATE/
# Comprimir
tar -czf $BACKUP_DIR/configs_$DATE.tar.gz -C $BACKUP_DIR configs_$DATE
rm -rf $BACKUP_DIR/configs_$DATE
echo "Config backup completed: configs_$DATE.tar.gz"
Git como Backup:
# Commitar configurações no Git
git add docker-stack.yml
git commit -m "Backup: Configurações $(date +%Y%m%d)"
git push origin main
📝 Backup de Logs
Logs Importantes
Logs a fazer backup:
- Logs de segurança
- Logs de auditoria
- Logs de erros críticos
- Logs de decisões importantes
Procedimento
Backup de Logs:
#!/bin/bash
# backup_logs.sh
BACKUP_DIR="/backups/logs"
DATE=$(date +%Y%m%d)
LOG_DIR="/var/log/csuite"
mkdir -p $BACKUP_DIR
# Backup de logs do dia anterior
tar -czf $BACKUP_DIR/logs_$DATE.tar.gz $LOG_DIR/*.log
# Remover logs antigos (após backup)
find $LOG_DIR -name "*.log" -mtime +7 -delete
echo "Log backup completed: logs_$DATE.tar.gz"
🔄 Restore
Restore de Banco de Dados
Restore Completo:
# Descomprimir se necessário
gunzip backup_csuite_20250102_020000.sql.gz
# Restore
mysql -u root -p csuite < backup_csuite_20250102_020000.sql
# Ou via Docker
docker exec -i csuite-mysql_mysql.1.xxx mysql -u root -p$MYSQL_ROOT_PASSWORD \
csuite < backup_csuite_20250102_020000.sql
Restore de Tabela Específica:
# Extrair tabela do backup
zcat backup_csuite_20250102_020000.sql.gz | \
sed -n '/^-- Table structure for table `table_name`/,/^-- Dump completed/p' > \
restore_table_name.sql
# Restore
mysql -u root -p csuite < restore_table_name.sql
Restore Parcial (dados específicos):
# Extrair dados específicos
zcat backup_csuite_20250102_020000.sql.gz | \
grep "INSERT INTO \`table_name\`" > restore_data.sql
# Restore
mysql -u root -p csuite < restore_data.sql
Restore de Configurações
Restore de Configurações:
# Descomprimir
tar -xzf configs_20250102.tar.gz
# Restaurar arquivos
cp configs_20250102/docker-stack.yml csuite-gateway/
cp configs_20250102/scripts/* scripts/
# Aplicar configurações
docker stack deploy -c csuite-gateway/docker-stack.yml csuite
Restore de Logs
Restore de Logs:
# Descomprimir
tar -xzf logs_20250102.tar.gz
# Copiar logs
cp logs_20250102/*.log /var/log/csuite/
✅ Testes de Restore
Frequência
Testes Regulares:
- Trimestral: Teste completo de restore
- Antes de Mudanças: Teste antes de alterações importantes
- Após Incidentes: Teste após incidentes de dados
Procedimento de Teste
1. Preparação:
# Criar ambiente de teste
docker-compose -f docker-compose.test.yml up -d mysql-test
# Criar banco de teste
mysql -u root -p -e "CREATE DATABASE csuite_test;"
2. Restore:
# Restaurar backup em ambiente de teste
mysql -u root -p csuite_test < backup_csuite_20250102_020000.sql
3. Validação:
# Verificar integridade
mysql -u root -p csuite_test -e "SELECT COUNT(*) FROM table_name;"
# Verificar dados
mysql -u root -p csuite_test -e "SELECT * FROM table_name LIMIT 10;"
# Verificar constraints
mysql -u root -p csuite_test -e "CHECK TABLE table_name;"
4. Documentação:
- Registrar resultado do teste
- Documentar problemas encontrados
- Atualizar procedimentos se necessário
🤖 Automação
Scripts de Automação
Backup Completo Automatizado:
#!/bin/bash
# automated_backup.sh
BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
# Criar diretórios
mkdir -p $BACKUP_DIR/{mysql,configs,logs}
# Backup MySQL
docker exec csuite-mysql_mysql.1.xxx mysqldump -u root -p$MYSQL_ROOT_PASSWORD \
--single-transaction --routines --triggers csuite | gzip > \
$BACKUP_DIR/mysql/backup_$DATE.sql.gz
# Backup Configs
tar -czf $BACKUP_DIR/configs/configs_$DATE.tar.gz \
csuite-*/docker-stack.yml scripts/ docs/operations/*.md
# Backup Logs
tar -czf $BACKUP_DIR/logs/logs_$DATE.tar.gz /var/log/csuite/*.log
# Limpar backups antigos
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
# Notificar
echo "Backup completed: $DATE" | mail -s "CSuite Backup" admin@example.com
Cron:
# Backup diário às 02:00 AM
0 2 * * * /path/to/automated_backup.sh >> /var/log/backup.log 2>&1
Integração com CI/CD
Backup antes de Deploy:
# .github/workflows/deploy.yml
- name: Backup before deploy
run: |
./scripts/backup_mysql.sh
./scripts/backup_configs.sh
📊 Monitoramento de Backups
Verificação de Sucesso
Checks a realizar:
- [ ] Backup executado com sucesso
- [ ] Arquivo de backup criado
- [ ] Tamanho do backup razoável
- [ ] Backup não está vazio
- [ ] Backup pode ser restaurado (teste periódico)
Alertas
Alertar se:
- Backup falhou
- Backup não foi executado
- Tamanho do backup anormal
- Restore de teste falhou
🔗 Documentos Relacionados
- DISASTER_RECOVERY.md - Plano de recuperação de desastres
- MONITORING_GUIDE.md - Guia de monitoramento
- RELEASE_PROCESS.md - Processo de release
Última Revisão: 2025-01-02
Próxima Revisão: 2025-04-02 (trimestral)