main
- Clarify SFTP uses SSH key authentication instead of password - Generalize destination server user description to be more flexible - Improve SSH key setup instructions with clearer step-by-step guidance - Update test command output message for better clarity - Simplify section headers and remove redundant logs section
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-availablee/opt - Compactação em
.tar.gzcom nome datado - Envio via SFTP para servidor remoto (autenticação por chave SSH)
- 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 com permissão de escrita no diretório de destino.
Configuração
1. Chave SSH
Gere um par de chaves no servidor de origem e copie a chave pública para o servidor de destino:
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub marco@170.231.184.32
Teste a conexão (não deve pedir senha):
ssh -i ~/.ssh/id_ed25519 marco@170.231.184.32 "echo CONEXÃO 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
- 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 |
Languages
Shell
100%