{"id":31675703,"url":"https://github.com/moskoweb/backup-service","last_synced_at":"2026-05-09T03:31:39.746Z","repository":{"id":315815995,"uuid":"1060790025","full_name":"moskoweb/backup-service","owner":"moskoweb","description":"Scripts de Backup de Banco de dados MySQL usando Percona/Mydumper direto no CloudFlare R2","archived":false,"fork":false,"pushed_at":"2025-10-15T04:02:04.000Z","size":96,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-15T15:22:42.372Z","etag":null,"topics":["backup","cloudflare","cloudflare-r2","mydumper","mydumper-backup","mysql","mysql-database","n8n","percona","percona-xtrabackup","shell-scripts","webhook"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moskoweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-20T15:46:12.000Z","updated_at":"2025-10-15T04:02:07.000Z","dependencies_parsed_at":"2025-10-15T16:23:08.570Z","dependency_job_id":"1f6cba6b-651d-40af-9ea4-a609f9a5906c","html_url":"https://github.com/moskoweb/backup-service","commit_stats":null,"previous_names":["moskoweb/percona-backup-r2-package","moskoweb/backup-service"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/moskoweb/backup-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moskoweb%2Fbackup-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moskoweb%2Fbackup-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moskoweb%2Fbackup-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moskoweb%2Fbackup-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moskoweb","download_url":"https://codeload.github.com/moskoweb/backup-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moskoweb%2Fbackup-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32805884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","cloudflare","cloudflare-r2","mydumper","mydumper-backup","mysql","mysql-database","n8n","percona","percona-xtrabackup","shell-scripts","webhook"],"created_at":"2025-10-08T05:00:54.587Z","updated_at":"2026-05-09T03:31:39.740Z","avatar_url":"https://github.com/moskoweb.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sistema de Backup MySQL Híbrido para Cloudflare R2\n\nSistema inteligente de backup MySQL que suporta dois modos de operação: **local** (Percona XtraBackup) para backups físicos completos e **remoto** (mydumper) para backups lógicos flexíveis.\n\n## 🎯 Características Principais\n\n- **Backup Híbrido**: Escolha entre backup físico (XtraBackup) ou lógico (mydumper)\n- **Detecção Automática**: Sistema detecta automaticamente o melhor método baseado na configuração\n- **Backup Completo**: Backups completos confiáveis em ambos os modos\n- **Armazenamento em Nuvem**: Upload direto para Cloudflare R2 (compatível com S3)\n- **Sistema Modular**: Execução por etapas independentes com checkpoints automáticos\n- **Checkpoints Inteligentes**: Retomada automática de processos interrompidos\n- **Execução Granular**: Execute etapas específicas ou processo completo\n- **Webhooks**: Notificações em tempo real sobre status dos backups\n- **Retenção Automática**: Limpeza automática de backups antigos\n- **Configuração Flexível**: Diferentes configurações por ambiente\n- **Alta Confiabilidade**: Validações robustas e recuperação automática de falhas\n\n## 📦 Estrutura do Projeto\n\n```\npercona-backup-r2-package/\n├── .env.example           # Configurações gerais e exemplos\n├── scripts/\n│   ├── backup.sh          # Script principal de backup\n│   ├── restore.sh         # Script de restauração\n│   └── cleanup.sh         # Script de limpeza/retenção\n└── README.md              # Esta documentação\n```\n\n## 🔄 Modos de Backup\n\n### 🏠 Modo Local (BACKUP_MODE=local)\n- **Ferramenta**: Percona XtraBackup\n- **Tipo**: Backup físico (arquivos de dados)\n- **Vantagens**: \n  - Backup físico completo\n  - Restauração mais rápida\n  - Menor impacto no servidor durante backup\n- **Ideal para**: Servidores de produção, backups regulares\n\n### 🌐 Modo Remoto (BACKUP_MODE=remote)\n- **Ferramenta**: mydumper/myloader\n- **Tipo**: Backup lógico (SQL dumps)\n- **Vantagens**:\n  - Backup paralelo e compressão\n  - Compatibilidade entre versões MySQL\n  - Backup seletivo de tabelas\n- **Ideal para**: Análises, migrações, ambientes de desenvolvimento\n\n## ⚡ Sistema Modular e Checkpoints\n\n### 🔄 Execução Modular\nTodos os scripts principais (`backup.sh`, `restore.sh`, `cleanup.sh`) agora suportam execução modular por etapas:\n\n#### 📦 Backup Modular\n```bash\n# Processo completo (padrão)\n./scripts/backup.sh\n\n# Etapas específicas\n./scripts/backup.sh --step backup      # Apenas backup do banco\n./scripts/backup.sh --step compression # Apenas compressão\n./scripts/backup.sh --step upload      # Apenas upload para R2\n\n# Para backup completo\n./scripts/backup.sh full # Backup completo\n```\n\n#### 🔄 Restore Modular\n```bash\n# Processo completo (padrão)\n./scripts/restore.sh backup-file.tar.gz\n\n# Etapas específicas\n./scripts/restore.sh backup-file.tar.gz --step download  # Apenas download\n./scripts/restore.sh backup-file.tar.gz --step extract  # Apenas extração\n./scripts/restore.sh backup-file.tar.gz --step restore  # Apenas restore\n```\n\n#### 🧹 Cleanup Modular\n```bash\n# Processo completo (padrão)\n./scripts/cleanup.sh\n\n# Etapas específicas\n./scripts/cleanup.sh --step list    # Apenas listagem de arquivos\n./scripts/cleanup.sh --step delete  # Apenas remoção de arquivos antigos\n./scripts/cleanup.sh --step verify  # Apenas verificação final\n```\n\n### 🎯 Sistema de Checkpoints\n\n#### Como Funciona\n- **Checkpoints Diários**: Cada etapa é salva como checkpoint por dia\n- **Retomada Automática**: Etapas já concluídas são automaticamente puladas\n- **Validação Inteligente**: Verifica integridade antes de pular etapas\n- **Limpeza Automática**: Checkpoints antigos são removidos automaticamente\n\n#### Benefícios\n- **Eficiência**: Evita reexecução desnecessária de etapas\n- **Confiabilidade**: Permite retomar processos interrompidos\n- **Flexibilidade**: Execute apenas as etapas necessárias\n- **Debugging**: Facilita identificação de problemas específicos\n\n#### Exemplo Prático\n```bash\n# Dia 1: Processo interrompido na etapa de upload\n./scripts/backup.sh\n# ✓ Backup concluído\n# ✓ Compressão concluída  \n# ✗ Upload falhou (conexão perdida)\n\n# Dia 1: Reexecução - apenas upload será executado\n./scripts/backup.sh\n# ✓ Backup já concluído, pulando...\n# ✓ Compressão já concluída, pulando...\n# ⚡ Executando upload...\n# ✓ Upload concluído\n```\n\n### 📋 Ajuda e Documentação\nTodos os scripts incluem ajuda integrada:\n\n```bash\n./scripts/backup.sh --help\n./scripts/restore.sh --help\n./scripts/cleanup.sh --help\n```\n\n## 🔧 Instalação\n\n### Requisitos do Sistema\n\n**Compatibilidade**: Linux (Ubuntu/Debian/CentOS) e macOS\n\n#### Linux (Ubuntu/Debian)\n```bash\n# Atualizar sistema\nsudo apt update\nsudo apt install pigz -y\n\n# Para Modo Local (XtraBackup)\nwget https://repo.percona.com/apt/percona-release_latest.generic_all.deb\nsudo dpkg -i percona-release_latest.generic_all.deb\nsudo percona-release setup ps80\nsudo apt update\nsudo apt install percona-xtrabackup-80 -y\n\n# Para Modo Remoto (mydumper)\nsudo apt install mydumper -y\n\n# AWS CLI (para ambos os modos)\ncurl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\nunzip awscliv2.zip\nsudo ./aws/install\n```\n\n#### macOS\n```bash\n# Instalar Homebrew (se não tiver)\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n\n# Para Modo Local (XtraBackup)\nbrew install percona-xtrabackup\n\n# Para Modo Remoto (mydumper)\nbrew install mydumper\n\n# AWS CLI (para ambos os modos)\nbrew install awscli\n```\n\n### Configuração do MySQL\nCrie um usuário específico para backups:\n\n```sql\n-- Para modo local (XtraBackup)\nCREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'senha_segura';\nGRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT, BACKUP_ADMIN ON *.* TO 'backup_user'@'localhost';\nGRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'backup_user'@'localhost';\n\n-- Para modo remoto (mydumper) - adicionar também:\nGRANT SELECT, LOCK TABLES, EVENT, TRIGGER, SHOW VIEW, EXECUTE ON *.* TO 'backup_user'@'%';\n\nFLUSH PRIVILEGES;\n```\n\n## ⚙️ Configuração\n\n### 1. Configurar Variáveis de Ambiente\nCopie o arquivo de exemplo para o arquivo de configuração:\n\n```bash\ncp .env.example .env\n```\n\nEdite o arquivo `.env` com suas configurações:\n\n```bash\n# Modo de backup (local ou remote)\nBACKUP_MODE=local\n\n# Configurações do banco\nDB_HOST=localhost\nDB_PORT=3306\nDB_USER=backup_user\nDB_PASSWORD=senha_segura\nDB_NAME=meu_banco\n\n# Configurações do Cloudflare R2\nR2_ENDPOINT=https://account-id.r2.cloudflarestorage.com\nR2_BUCKET=meu-bucket-backup\nAWS_ACCESS_KEY_ID=sua_access_key\nAWS_SECRET_ACCESS_KEY=sua_secret_key\n\n# Configurações opcionais\nRETENTION_DAYS=30\nWEBHOOK_URL=https://hooks.slack.com/services/...\nWEBHOOK_EVENTS=success,error\n```\n\n### 2. Exemplos de Configuração por Ambiente\n\n#### Produção (Backup Físico)\n```bash\nBACKUP_MODE=local\nDB_HOST=prod-mysql.empresa.com\nDB_NAME=producao_db\nRETENTION_DAYS=90\nWEBHOOK_EVENTS=success,error,cleanup\n```\n\n#### Desenvolvimento (Backup Lógico)\n```bash\nBACKUP_MODE=remote\nDB_HOST=dev-mysql.empresa.com\nDB_NAME=desenvolvimento_db\nRETENTION_DAYS=7\n```\n\n#### Análise de Dados (Backup Seletivo)\n```bash\nBACKUP_MODE=remote\nDB_HOST=analytics-mysql.empresa.com\nDB_NAME=analytics_db\n```\n\n## 🚀 Uso\n\n### Backup Completo\nO sistema executa sempre backup completo:\n\n```bash\n# Execução padrão (recomendado)\n./scripts/backup.sh\n\n# Ou explicitamente\n./scripts/backup.sh full\n\n# Executar apenas etapas específicas\n./scripts/backup.sh --step backup      # Só backup\n./scripts/backup.sh --step compression # Só compressão\n./scripts/backup.sh --step upload      # Só upload\n```\n\n### Restauração\n```bash\n# Restaurar backup específico\n./scripts/restore.sh 2025-01-20-full.tar.gz\n\n# Listar backups disponíveis\n./scripts/restore.sh --list\n\n# Execução modular - etapas específicas\n./scripts/restore.sh backup.tar.gz --step download  # Só download\n./scripts/restore.sh backup.tar.gz --step extract  # Só extração\n./scripts/restore.sh backup.tar.gz --step restore  # Só restore\n\n# Ver opções disponíveis\n./scripts/restore.sh --help\n```\n\n### Limpeza de Backups Antigos\n```bash\n# Executar limpeza baseada na retenção configurada\n./scripts/cleanup.sh\n\n# Limpeza com retenção específica (em dias)\n./scripts/cleanup.sh 15\n\n# Execução modular - etapas específicas\n./scripts/cleanup.sh --step list    # Só listagem\n./scripts/cleanup.sh --step delete  # Só remoção\n./scripts/cleanup.sh --step verify  # Só verificação\n\n# Ver opções disponíveis\n./scripts/cleanup.sh --help\n```\n\n### 🔄 Recursos Avançados\n\n#### Retomada Automática\n```bash\n# Se um processo foi interrompido, simplesmente execute novamente\n# O sistema automaticamente detecta e retoma de onde parou\n./scripts/backup.sh   # Retoma automaticamente\n./scripts/restore.sh backup.tar.gz  # Retoma automaticamente\n./scripts/cleanup.sh  # Retoma automaticamente\n```\n\n#### Debugging e Monitoramento\n```bash\n# Verificar status de checkpoints\nls -la /tmp/backup_checkpoints_$(date +%Y%m%d)/\n\n# Forçar limpeza de checkpoints (se necessário)\nrm -rf /tmp/backup_checkpoints_*\nrm -rf /tmp/restore_checkpoints_*\nrm -rf /tmp/cleanup_checkpoints_*\n```\n\n## 🔔 Webhooks e Notificações\n\nConfigure webhooks para receber notificações em tempo real sobre todas as operações do sistema:\n\n```bash\n# No .env\nWEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\nWEBHOOK_EVENTS=success,error,restore,cleanup\n```\n\n### 🏷️ Códigos de Status Padronizados\n\nO sistema utiliza códigos padronizados para identificar diferentes tipos de eventos:\n\n#### 📦 **Backup (backup.sh)**\n- **B000**: Backup concluído com sucesso\n- **B001**: Falha no backup do banco de dados\n- **B002**: Falha na compactação do backup\n- **B003**: Falha no upload para R2\n\n#### 🔄 **Restore (restore.sh)**\n- **R000**: Restore concluído com sucesso\n- **R001**: Falha no download do backup\n- **R002**: Falha na extração do backup\n- **R003**: Falha no restore do backup\n\n#### 🧹 **Cleanup (cleanup.sh)**\n- **C000**: Processo de limpeza concluído\n- **C001**: Falha na listagem de arquivos\n- **C002**: Falha na remoção de arquivos\n- **C003**: Falha na verificação final\n\n### 📋 Lista Completa de Webhooks Ativos\n\n#### 📦 **Script de Backup (backup.sh)**\n\n**Webhooks de Sucesso:**\n- **B000** - `\"Backup concluído com sucesso\"` - Backup finalizado com sucesso\n\n**Webhooks de Erro:**\n- **B001** - `\"Falha no backup do banco de dados\"` - Erro durante execução do backup\n- **B002** - `\"Falha na compactação do backup\"` - Erro durante compactação do arquivo\n- **B003** - `\"Falha no upload para R2\"` - Erro ao enviar arquivo para o bucket\n\n#### 🔄 **Script de Restore (restore.sh)**\n\n**Webhooks de Sucesso:**\n- **R000** - `\"Restore concluído\"` - Restore do backup concluído com sucesso\n\n**Webhooks de Erro:**\n- **R001** - `\"Falha no download do backup\"` - Erro ao baixar arquivo do bucket\n- **R002** - `\"Falha na extração do backup\"` - Erro ao extrair arquivo de backup\n- **R003** - `\"Falha no restore do backup\"` - Erro ao restaurar dados do MySQL\n\n#### 🧹 **Script de Limpeza (cleanup.sh)**\n\n**Webhooks de Sucesso:**\n- **C000** - `\"Processo de limpeza concluído\"` - Limpeza completa finalizada com sucesso\n\n**Webhooks de Erro:**\n- **C001** - `\"Falha na listagem de arquivos\"` - Erro durante listagem de arquivos\n- **C002** - `\"Falha na remoção de arquivos\"` - Erro durante remoção de arquivos antigos\n- **C003** - `\"Falha na verificação final\"` - Erro durante verificação final de limpeza\n\n### 📊 **Exemplos de Webhooks Enviados**\n\n#### ✅ **Webhook de Sucesso (Backup)**\n```json\n{\n    \"event\": \"success\",\n    \"timestamp\": \"2025-01-21 02:00:00\",\n    \"message\": \"Backup concluído com sucesso\",\n    \"code\": \"B000\",\n    \"details\": \"Backup full finalizado\",\n    \"filename\": \"backup_20250121_020000.tar.gz\"\n}\n```\n\n#### ❌ **Webhook de Erro (Restore)**\n```json\n{\n    \"event\": \"error\",\n    \"timestamp\": \"2025-01-21 03:15:00\",\n    \"message\": \"Falha no download do backup\",\n    \"code\": \"R001\",\n    \"details\": \"Erro ao baixar arquivo do bucket\",\n    \"filename\": \"backup_20250120_020000.tar.gz\"\n}\n```\n\n#### ✅ **Webhook de Sucesso (Cleanup)**\n```json\n{\n    \"event\": \"success\",\n    \"timestamp\": \"2025-01-21 04:00:00\",\n    \"message\": \"Processo de limpeza concluído\",\n    \"code\": \"C000\",\n    \"details\": \"Limpeza completa finalizada com sucesso\",\n    \"removed_files\": 5,\n    \"freed_space\": \"2.3GB\"\n}\n```\n\n\n## 🗓️ Agendamento com Cron\n\n### Configuração Recomendada\n```bash\n# Editar crontab\ncrontab -e\n\n# Backup diário às 2h da manhã\n0 2 * * * /caminho/para/scripts/backup.sh \u003e\u003e /var/log/mysql-backup.log 2\u003e\u00261\n\n# Limpeza semanal aos domingos às 3h\n0 3 * * 0 /caminho/para/scripts/cleanup.sh \u003e\u003e /var/log/mysql-cleanup.log 2\u003e\u00261\n```\n\n### Configuração Avançada por Ambiente\n```bash\n# Produção: backup diário + limpeza semanal\n0 2 * * * /opt/backup/scripts/backup.sh\n0 3 * * 0 /opt/backup/scripts/cleanup.sh\n\n# Desenvolvimento: backup a cada 6 horas\n0 */6 * * * /opt/backup/scripts/backup.sh\n\n# Staging: backup diário + retenção menor\n0 1 * * * /opt/backup/scripts/backup.sh\n0 2 * * 0 /opt/backup/scripts/cleanup.sh 7\n```\n\n## 🔍 Monitoramento e Logs\n\n### Verificar Status dos Backups\n```bash\n# Ver logs do último backup\ntail -f /var/log/mysql-backup.log\n\n# Verificar backups no R2\naws s3 ls s3://seu-bucket-backup/ --endpoint-url=https://account-id.r2.cloudflarestorage.com\n```\n\n### Métricas Importantes\n- **Tempo de execução**: Monitore a duração dos backups\n- **Tamanho dos arquivos**: Acompanhe o crescimento dos backups\n- **Taxa de sucesso**: Verifique falhas através dos webhooks\n- **Espaço em disco**: Monitore o diretório temporário\n\n## 🛠️ Solução de Problemas\n\n### Problemas Comuns\n\n#### Erro de Permissões MySQL\n```bash\n# Verificar permissões do usuário\nSHOW GRANTS FOR 'backup_user'@'localhost';\n\n# Recriar usuário se necessário\nDROP USER 'backup_user'@'localhost';\n# ... recriar com permissões corretas\n```\n\n#### Falha no Upload para R2\n```bash\n# Testar conectividade\naws s3 ls s3://seu-bucket/ --endpoint-url=https://account-id.r2.cloudflarestorage.com\n\n# Verificar credenciais\naws configure list\n```\n\n\n#### Problemas com Checkpoints\n```bash\n# Checkpoint corrompido ou inválido\nrm -rf /tmp/backup_checkpoints_$(date +%Y%m%d)\n./scripts/backup.sh  # Reinicia processo completo\n\n# Verificar integridade dos checkpoints\nls -la /tmp/backup_checkpoints_$(date +%Y%m%d)/\ncat /tmp/backup_checkpoints_$(date +%Y%m%d)/backup_completed\n\n# Forçar execução de etapa específica (ignora checkpoint)\nrm /tmp/backup_checkpoints_$(date +%Y%m%d)/upload_completed\n./scripts/backup.sh --step upload\n```\n\n#### Processo Travado em Etapa Específica\n```bash\n# Identificar qual etapa está travada\n./scripts/backup.sh --help  # Ver etapas disponíveis\n\n# Executar etapa específica para debug\n./scripts/backup.sh --step backup\n./scripts/backup.sh --step compression\n./scripts/backup.sh --step upload\n\n# Para restore\n./scripts/restore.sh backup.tar.gz --step download\n./scripts/restore.sh backup.tar.gz --step extract\n./scripts/restore.sh backup.tar.gz --step restore\n```\n\n#### Falha na Validação de Arquivos\n```bash\n# Verificar integridade manualmente\ntar -tzf /tmp/backup.tar.gz \u003e /dev/null \u0026\u0026 echo \"Arquivo OK\" || echo \"Arquivo corrompido\"\n\n# Recriar arquivo se necessário\nrm /tmp/backup_checkpoints_$(date +%Y%m%d)/compression_completed\n./scripts/backup.sh --step compression\n```\n\n### Logs e Debug\n```bash\n# Habilitar modo debug\nexport DEBUG=1\n./scripts/backup.sh\n\n# Verificar logs detalhados\ntail -f /tmp/backup_debug.log\n\n# Logs específicos por etapa\ntail -f /tmp/backup_backup.log\ntail -f /tmp/backup_compression.log\ntail -f /tmp/backup_upload.log\n\n# Verificar status de checkpoints\nfind /tmp -name \"*_checkpoints_*\" -type d\nls -la /tmp/backup_checkpoints_$(date +%Y%m%d)/\n```\n\n### 🔧 Comandos de Manutenção\n\n#### Limpeza de Checkpoints Antigos\n```bash\n# Limpeza automática (executada pelos scripts)\nfind /tmp -name \"*_checkpoints_*\" -type d -mtime +7 -exec rm -rf {} \\;\n\n# Limpeza manual de todos os checkpoints\nrm -rf /tmp/backup_checkpoints_*\nrm -rf /tmp/restore_checkpoints_*\nrm -rf /tmp/cleanup_checkpoints_*\n```\n\n#### Reset Completo do Sistema\n```bash\n# Para reiniciar completamente todos os processos\nrm -rf /tmp/backup_checkpoints_*\nrm -rf /tmp/restore_checkpoints_*\nrm -rf /tmp/cleanup_checkpoints_*\nrm -f /tmp/backup*.log\nrm -f /tmp/restore*.log\nrm -f /tmp/cleanup*.log\n\necho \"Sistema resetado - próxima execução será completa\"\n```\n\n## 📊 Comparação de Performance\n\n| Aspecto | Modo Local (XtraBackup) | Modo Remoto (mydumper) | Sistema Modular |\n|---------|-------------------------|------------------------|-----------------|\n| **Velocidade Backup** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **Velocidade Restore** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n\n| **Paralelização** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |\n| **Compressão** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **Flexibilidade** | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **Compatibilidade** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **Confiabilidade** | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **Retomada Automática** | ❌ Não suportado | ❌ Não suportado | ✅ Checkpoints |\n| **Execução Granular** | ❌ Processo único | ❌ Processo único | ✅ Por etapas |\n| **Debugging** | ⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |\n\n### 🚀 Vantagens do Sistema Modular\n\n#### ✅ Benefícios Operacionais\n- **Retomada Inteligente**: Nunca perca progresso por falhas de rede ou sistema\n- **Execução Seletiva**: Execute apenas as etapas necessárias\n- **Debugging Facilitado**: Identifique problemas em etapas específicas\n- **Eficiência de Recursos**: Evite reprocessamento desnecessário\n\n#### ⚡ Cenários de Uso Otimizados\n- **Conexões Instáveis**: Checkpoints garantem continuidade\n- **Ambientes de Produção**: Menor impacto com execução granular\n- **Manutenção**: Facilita troubleshooting e correções\n- **Automação**: Integração perfeita com sistemas de monitoramento\n\n## 🔒 Segurança\n\n### Boas Práticas\n1. **Credenciais**: Use variáveis de ambiente, nunca hardcode senhas\n2. **Usuário MySQL**: Crie usuário específico com permissões mínimas\n3. **Criptografia**: Backups são comprimidos e podem ser criptografados\n4. **Acesso R2**: Use IAM policies restritivas no Cloudflare\n5. **Logs**: Não registre senhas nos logs de sistema\n\n### Exemplo de Política IAM para R2\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:GetObject\",\n        \"s3:DeleteObject\",\n        \"s3:ListBucket\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::seu-bucket-backup\",\n        \"arn:aws:s3:::seu-bucket-backup/*\"\n      ]\n    }\n  ]\n}\n```\n\n## 🤝 Contribuição\n\nPara contribuir com o projeto:\n\n1. Fork o repositório\n2. Crie uma branch para sua feature (`git checkout -b feature/nova-funcionalidade`)\n3. Commit suas mudanças (`git commit -am 'Adiciona nova funcionalidade'`)\n4. Push para a branch (`git push origin feature/nova-funcionalidade`)\n5. Abra um Pull Request\n\n## 📝 Licença\n\nEste projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.\n\n## 🆘 Suporte\n\nPara suporte e dúvidas:\n- Abra uma issue no GitHub\n- Consulte a documentação do [Percona XtraBackup](https://docs.percona.com/percona-xtrabackup/)\n- Consulte a documentação do [mydumper](https://github.com/mydumper/mydumper)\n- Documentação do [Cloudflare R2](https://developers.cloudflare.com/r2/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoskoweb%2Fbackup-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoskoweb%2Fbackup-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoskoweb%2Fbackup-service/lists"}