# Backup Automático — Servidor Debian 12 Backup automatizado de diretórios e bancos de dados MariaDB com envio via SFTP para servidor remoto. ## O que faz - Dump de todos os bancos de dados MariaDB (exceto internos do sistema) - Cópia dos diretórios `/var/www`, `/etc/nginx/sites-available` e `/opt` - Compactação em `.tar.gz` com nome datado - Envio via SFTP para servidor remoto - Limpeza automática de backups antigos (retenção configurável) ## Pré-requisitos No servidor de origem: ```bash apt-get install mariadb-client openssh-client ``` No servidor de destino: SSH ativo na porta 22 e usuário `marco` com permissão de escrita em `/home/marco/backups`. ## Configuração ### 1. Chave SSH (sem senha no script) No servidor de origem: ```bash ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 ssh-copy-id -i ~/.ssh/id_ed25519.pub marco@170.231.184.32 ``` Teste: ```bash ssh -i ~/.ssh/id_ed25519 marco@170.231.184.32 "echo OK" ``` ### 2. Arquivo `.env` ```bash cp .env.example .env nano .env ``` Conteúdo do `.env`: ```env MYSQL_USER="root" MYSQL_PASS="senha_do_mariadb" SFTP_HOST="170.231.184.32" SFTP_USER="marco" SFTP_DIR="/home/marco/backups" ``` Proteja o arquivo: ```bash chmod 600 .env ``` ### 3. Teste manual ```bash ./backup_automatico.sh ``` ## Agendamento via cron (execução diária às 01:00) ### 1. Editar o crontab do root ```bash crontab -e ``` Na primeira vez, escolha o editor (recomende `nano` — opção 1). ### 2. Adicionar a entrada ``` 0 1 * * * /home/marco/BackupAutomatico/backup_automatico.sh >> /var/log/backup_cron.log 2>&1 ``` | Campo | Valor | Descrição | |---|---|---| | `0` | minuto | no minuto 0 | | `1` | hora | às 01:00 | | `*` | dia do mês | todos os dias | | `*` | mês | todos os meses | | `*` | dia da semana | todos os dias | Salve e saia do editor (no `nano`: `Ctrl+O`, `Enter`, `Ctrl+X`). ### 3. Verificar se o cron está registrado ```bash crontab -l ``` Deve exibir a linha adicionada. ### 4. Verificar se o serviço cron está ativo ```bash systemctl status cron ``` Se estiver inativo, ative e habilite no boot: ```bash systemctl enable --now cron ``` ### 5. Logs do cron - **Logs da execução do backup:** `$LOG_FILE` (padrão: `/var/log/backup_server.log`) - **Logs do próprio cron:** `/var/log/backup_cron.log` - **Logs do sistema (syslog):** `journalctl -u cron` Para acompanhar o log do cron em tempo real: ```bash tail -f /var/log/backup_cron.log ``` ## Variáveis de configuração | Variável | Descrição | Padrão | |---|---|---| | `MYSQL_USER` | Usuário do MariaDB | `root` | | `MYSQL_PASS` | Senha do MariaDB | *(obrigatório)* | | `SFTP_HOST` | IP/host do servidor de destino | *(obrigatório)* | | `SFTP_USER` | Usuário SSH no servidor de destino | *(obrigatório)* | | `SFTP_DIR` | Diretório de destino no servidor remoto | *(obrigatório)* | | `LOCAL_RETENTION` | Quantos backups locais manter (0 = desativado) | `3` | | `LOG_FILE` | Caminho do arquivo de log | `/var/log/backup_server.log` | ## Logs Os logs do script ficam em `$LOG_FILE`. Os logs do cron ficam em `/var/log/backup_cron.log`.