11 min de leitura · Guia técnico
Para configurar o backup automatizado do MySQL sem plugins, utilize o mysqldump com cron jobs para agendar e executar backups regulares. Este método protege seus dados de forma eficiente e segura.
- Criar script de backup com mysqldump
- Configurar compressão e rotação de arquivos
- Agendar execução automática via crontab
- Implementar notificações por email
- Testar restauração dos backups
- Monitorar logs e espaço em disco
Pré-requisitos
- Acesso SSH ao servidor VPS ou dedicado
- MySQL/MariaDB instalado e funcionando
- Usuário com privilégios SELECT e LOCK TABLES
- Espaço em disco suficiente para armazenar backups
- Conhecimento básico de comandos Linux
- Editor de texto como nano ou vim
Criando o script de backup MySQL automatizado
O primeiro passo para configurar backup automatizado do MySQL é criar um script shell que execute o mysqldump de forma segura. Este script deve incluir compressão, nomenclatura com timestamp e tratamento de erros.
Crie o diretório para armazenar os scripts e backups:
sudo mkdir -p /opt/mysql-backup/scripts
sudo mkdir -p /opt/mysql-backup/data
sudo chown $USER:$USER /opt/mysql-backup -R
Agora crie o script principal de backup:
nano /opt/mysql-backup/scripts/mysql_backup.sh
Adicione o seguinte conteúdo ao script:
#!/bin/bash
# Configurações do banco
DB_USER="backup_user"
DB_PASS="sua_senha_segura"
DB_HOST="localhost"
BACKUP_DIR="/opt/mysql-backup/data"
LOG_FILE="/opt/mysql-backup/backup.log"
# Data e hora para nomenclatura
DATE=$(date +"%Y%m%d_%H%M%S")
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
# Função de log
log_message() {
echo "[$TIMESTAMP] $1" >> $LOG_FILE
}
# Início do backup
log_message "Iniciando backup MySQL"
# Lista de bancos para backup (exclui system databases)
DATABASES=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
# Backup de cada banco
for DB in $DATABASES; do
BACKUP_FILE="$BACKUP_DIR/${DB}_${DATE}.sql.gz"
log_message "Fazendo backup do banco: $DB"
mysqldump -u$DB_USER -p$DB_PASS -h$DB_HOST \
--single-transaction \
--routines \
--triggers \
--events \
--quick \
--lock-tables=false \
$DB | gzip > $BACKUP_FILE
if [ $? -eq 0 ]; then
log_message "Backup do $DB concluído: $BACKUP_FILE"
else
log_message "ERRO: Falha no backup do $DB"
fi
done
# Limpeza de backups antigos (manter últimos 7 dias)
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
log_message "Limpeza de backups antigos concluída"
log_message "Backup MySQL finalizado"
Torne o script executável:
chmod +x /opt/mysql-backup/scripts/mysql_backup.sh
Configurando usuário MySQL para backup
Para maior segurança, crie um usuário específico para backups com privilégios mínimos necessários. Este usuário deve ter apenas as permissões SELECT e LOCK TABLES.
Acesse o MySQL como root:
mysql -u root -p
Execute os comandos SQL para criar o usuário:
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'sua_senha_segura';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Teste a conexão com o novo usuário:
mysql -u backup_user -p -e "SHOW DATABASES;"
Output esperado:
+--------------------+
| Database |
+--------------------+
| information_schema |
| seu_banco_1 |
| seu_banco_2 |
+--------------------+
Automatizando com cron jobs
O agendamento via crontab permite executar backups MySQL automatizados em intervalos regulares. Configure diferentes frequências conforme a criticidade dos dados.
Abra o crontab do usuário:
crontab -e
Adicione as seguintes linhas para diferentes frequências de backup:
# Backup completo diário às 2:00 AM
0 2 * * * /opt/mysql-backup/scripts/mysql_backup.sh
# Backup incremental a cada 6 horas
0 */6 * * * /opt/mysql-backup/scripts/mysql_backup.sh
# Backup semanal aos domingos às 1:00 AM (opcional)
0 1 * * 0 /opt/mysql-backup/scripts/mysql_backup.sh
Verifique se o cron está ativo:
systemctl status cron
Para monitorar a execução, verifique os logs:
tail -f /opt/mysql-backup/backup.log
Implementando notificações por email
Configure notificações automáticas para monitorar o status dos backups MySQL. Isso permite identificar rapidamente falhas no processo de backup.
Instale o utilitário de email:
sudo apt update
sudo apt install mailutils -y
Crie um script de notificação:
nano /opt/mysql-backup/scripts/notify_backup.sh
Adicione o conteúdo:
#!/bin/bash
EMAIL="[email protected]"
LOG_FILE="/opt/mysql-backup/backup.log"
SUBJECT="Status Backup MySQL - $(hostname)"
# Verifica últimas 10 linhas do log
LAST_BACKUP=$(tail -10 $LOG_FILE)
# Verifica se houve erro
if echo "$LAST_BACKUP" | grep -q "ERRO"; then
SUBJECT="ERRO - $SUBJECT"
echo "Erro detectado no backup MySQL:" | mail -s "$SUBJECT" $EMAIL
else
echo "Backup MySQL executado com sucesso" | mail -s "$SUBJECT" $EMAIL
fi
Torne executável e adicione ao cron:
chmod +x /opt/mysql-backup/scripts/notify_backup.sh
Modifique o crontab para incluir notificação:
0 2 * * * /opt/mysql-backup/scripts/mysql_backup.sh && /opt/mysql-backup/scripts/notify_backup.sh
Testando e validando backups
A validação regular dos backups MySQL é crucial para garantir que os dados possam ser restaurados quando necessário. Execute testes de restauração periodicamente.
Execute o script manualmente para testar:
/opt/mysql-backup/scripts/mysql_backup.sh
Verifique se os arquivos foram criados:
ls -la /opt/mysql-backup/data/
Output esperado:
-rw-r--r-- 1 user user 1234567 Dec 15 14:30 meu_banco_20231215_143000.sql.gz
-rw-r--r-- 1 user user 987654 Dec 15 14:30 outro_banco_20231215_143000.sql.gz
Para testar a integridade do backup, restaure em um banco de teste:
# Criar banco de teste
mysql -u root -p -e "CREATE DATABASE teste_restore;"
# Restaurar backup
gunzip -c /opt/mysql-backup/data/meu_banco_20231215_143000.sql.gz | mysql -u root -p teste_restore
# Verificar tabelas restauradas
mysql -u root -p -e "USE teste_restore; SHOW TABLES;"
Monitoramento e otimização
Implemente monitoramento contínuo para acompanhar o desempenho e uso de recursos dos backups automatizados do MySQL. Isso inclui verificação de espaço em disco e tempo de execução.
Crie script de monitoramento:
nano /opt/mysql-backup/scripts/monitor_backup.sh
Adicione o conteúdo:
#!/bin/bash
BACKUP_DIR="/opt/mysql-backup/data"
LOG_FILE="/opt/mysql-backup/monitor.log"
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
# Verifica espaço em disco
DISK_USAGE=$(df -h $BACKUP_DIR | awk 'NR==2 {print $5}' | sed 's/%//')
# Conta arquivos de backup
BACKUP_COUNT=$(find $BACKUP_DIR -name "*.sql.gz" | wc -l)
# Tamanho total dos backups
TOTAL_SIZE=$(du -sh $BACKUP_DIR | awk '{print $1}')
# Log das informações
echo "[$TIMESTAMP] Uso disco: ${DISK_USAGE}% | Backups: $BACKUP_COUNT | Tamanho: $TOTAL_SIZE" >> $LOG_FILE
# Alerta se uso > 80%
if [ $DISK_USAGE -gt 80 ]; then
echo "ALERTA: Uso de disco alto ($DISK_USAGE%)" | mail -s "Alerta Backup MySQL" [email protected]
fi
Configure execução diária do monitoramento:
chmod +x /opt/mysql-backup/scripts/monitor_backup.sh
Adicione ao crontab:
0 8 * * * /opt/mysql-backup/scripts/monitor_backup.sh
Problemas comuns e como resolver
Sintoma: Backup falha com erro "Access denied"
Causa: Usuário MySQL não possui privilégios suficientes ou senha incorreta.
Solução: Verifique as credenciais no script e confirme se o usuário tem privilégios SELECT e LOCK TABLES. Execute mysql -u backup_user -p -e "SHOW GRANTS;" para verificar permissões.
Sintoma: Arquivos de backup não são criados
Causa: Problemas de permissão no diretório de destino ou espaço em disco insuficiente.
Solução: Verifique permissões com ls -la /opt/mysql-backup/ e espaço disponível com df -h. Ajuste permissões com chown $USER:$USER /opt/mysql-backup -R.
Sintoma: Cron job não executa automaticamente
Causa: Serviço cron inativo ou sintaxe incorreta no crontab.
Solução: Verifique se o cron está rodando com systemctl status cron. Valide a sintaxe do crontab com crontab -l e verifique logs em /var/log/cron.
Sintoma: Backup muito lento ou trava o banco
Causa: Falta da opção --single-transaction ou banco muito grande.
Solução: Use sempre --single-transaction para InnoDB. Para bancos grandes, considere backup por tabelas ou use ferramentas como Percona XtraBackup. Adicione --quick para reduzir uso de memória.
Perguntas frequentes sobre backup automatizado MySQL
É seguro fazer backup do MySQL com mysqldump em produção?
Sim, o mysqldump é seguro para produção pois cria backups consistentes sem bloquear o banco. Para bases muito grandes, use a opção --single-transaction para garantir consistência transacional.
Com que frequência devo fazer backup automatizado do MySQL?
Para sites de produção, recomenda-se backup diário completo e backup incremental a cada 6 horas. Sites críticos podem precisar de backups a cada hora, dependendo do volume de transações.
Como verificar se o backup automatizado do MySQL está funcionando?
Verifique os logs do cron em /var/log/cron, confirme a criação dos arquivos de backup no diretório configurado e teste a restauração periodicamente para validar a integridade dos dados.
Qual o tamanho máximo recomendado para backups MySQL automatizados?
Backups até 2GB funcionam bem com mysqldump. Para bases maiores, considere usar ferramentas como Percona XtraBackup ou implemente backup por tabelas separadas para otimizar o processo.
Posso configurar backup MySQL automatizado sem acesso root?
Sim, você pode configurar via cPanel ou com usuário MySQL que tenha privilégios SELECT e LOCK TABLES. O cron do usuário comum funciona perfeitamente para essa tarefa sem necessidade de root.
Conclusão
- Configure scripts automatizados com mysqldump, compressão e rotação de arquivos para proteger seus dados MySQL de forma eficiente
- Implemente monitoramento contínuo com logs, notificações por email e verificação de espaço em disco para garantir funcionamento adequado
- Teste regularmente a restauração dos backups para validar a integridade e disponibilidade dos dados em caso de emergência
Leia também
- Otimizar cache Redis para aplicações PHP no Ubuntu 22.04
- Configurar Alertas Automáticos com Zabbix no Ubuntu
- Entenda o que é Swap no Linux: como funciona e quando usar
Precisa de ajuda com backup MySQL no seu servidor?
Nossa equipe especializada pode configurar e otimizar sistemas de backup automatizado para seu ambiente MySQL. Oferecemos suporte completo para implementação segura e monitoramento contínuo.