Backup Restore Guide

💾 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

  1. Visão Geral
  2. Estratégia de Backup
  3. Backup de Banco de Dados
  4. Backup de Configurações
  5. Backup de Logs
  6. Restore
  7. Testes de Restore
  8. 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

  1. Proteção de Dados: Garantir que dados não sejam perdidos
  2. Recuperação Rápida: Restaurar dados rapidamente quando necessário
  3. Rastreabilidade: Manter histórico de backups
  4. Conformidade: Atender requisitos de retenção

Princípios


📦 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


Última Revisão: 2025-01-02
Próxima Revisão: 2025-04-02 (trimestral)

🔊 Text-to-Speech

1.0x
1.0
Pronto para reproduzir