Files
BackupAutomatico/README.md
T
marcocosta10000 ac66eb5e9a docs(readme): add setup and configuration guide for backup automation
Add comprehensive documentation covering SSH key generation, environment
variable configuration, cron scheduling, and log file management for the
automated backup system on Debian 12.
2026-09-17 21:00:09 -03:00

3.1 KiB

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:

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:

ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub marco@170.231.184.32

Teste:

ssh -i ~/.ssh/id_ed25519 marco@170.231.184.32 "echo OK"

2. Arquivo .env

cp .env.example .env
nano .env

Conteúdo do .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:

chmod 600 .env

3. Teste manual

./backup_automatico.sh

Agendamento via cron (execução diária às 01:00)

1. Editar o crontab do root

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

crontab -l

Deve exibir a linha adicionada.

4. Verificar se o serviço cron está ativo

systemctl status cron

Se estiver inativo, ative e habilite no boot:

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:

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.