Script de backup de banco de dados Mysql


Fala pessoal tudo beleza?
Nesse artigo vou mostrar um script bem bacana para fazer backup de banco de dados Mysql.
O script irá gerar um arquivo de log para futuras consultas e também terá a opção de remover os backups antigos. Uma dica interessante é utilizar notificações para que quando ocorrer algum erro seja enviado um email ou uma notificação.
Atualização (11/03/2023): Backup na AWS S3 - Escrevi um novo artigo onde adicionei a opção de sincronizar o backup do Mysql no S3 da AWS. Acesse o novo artigo nesse link.
Bora então ver esse script?
Irei colocar trechos do código do script separadamente e com explicações. No final deixarei o script completo para vocês, ok?
Aqui iremos definir o caminho de onde serão salvos os arquivos de logs.
# Caminho do arquivo de log
LOG_DIR=/var/log/backup
LOG=$LOG_DIR/backup_db_$ANO$MES$DIA.log
Nesse trecho definimos o diretório que os backups serão salvos.
# Diretorio onde serão salvos os backups
DIR_BK=/var/backups/database
Para evitar erros durante o processo, antes de salvarmos os arquivos de log e backup iremos verificar se o diretório existe, caso não, iremos criar.
# Verifica se existe o diretorio para armazenar os logs
if [ ! -d $LOG ]; then
mkdir $LOG
fi
# Verifica se existe o diretorio para o backup
if [ ! -d $DIR_BK ]; then
mkdir -p $DIR_BK
fi
Aqui vai uma dica bastante útil, você pode definir os bancos de dados que serão backupeados durante o processo. Para isso informe o nome dos bancos separados por espaços.
# Lista dos bancos de dados que serão realizados o backup
DATABASES=(banco01 banco02 banco03)
Agora nesse trecho, iremos fazer um loop percorrendo a lista de bancos que foram informados na linha acima. Após o término do backup iremos compactar o arquivo sql em bz2.
# Loop para backupear todos os bancos
for db in "${DATABASES[@]}"; do
# Mysql DUMP
mysqldump -u$USER -p$PASS $db > $DIR_BK/$db'_'$DATA_ATUAL.sql
# Compacta o arquivo sql em BZ2
bzip2 $DIR_BK/$db'_'$DATA_ATUAL.sql
done
Nessa linha, informamos que os backups com mais de 5 dias serão removidos, assim economizando espaço. Você pode alterar o número de dias conforme sua necessidade.
# Remove arquivos de backups antigos
find $DIR_BK -type f -mtime +5 -exec rm -rf {} \;
Bom, até aqui vimos alguns trechos do script de backup, que somente eles não fazem sentido.
Esse é um script simples, mas que pode ser melhorado e já resolve e muito nas rotinas de backups.
Veja abaixo o script completo.
#!/bin/bash
#
# Autor: Aristides Neto
# Email: falecom@aristides.dev
#
# Data: 09/06/2019
#
# Realiza o backup de bancos de dados MySQL
#
# Define usuario e senha do banco
USER='root'
PASS='root'
# Datas
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`
DATA_ATUAL=`date +%Y-%m-%d-%H-%M`
# Data de Inicio do Backup
DATA_INICIO=`date +%d/%m/%Y-%H:%M:%S`
# Caminho do arquivo de log
LOG_DIR=/var/log/backup
LOG=$LOG_DIR/backup_db_$ANO$MES$DIA.log
# Diretorio onde serão salvos os backups
DIR_BK=/var/backups/database
# Lista dos bancos de dados que serão realizados o backup
DATABASES=(banco01 banco02)
# Verifica se existe o diretorio para armazenar os logs
if [ ! -d $LOG_DIR ]; then
mkdir $LOG_DIR
fi
# Verifica se existe o diretorio para o backup
if [ ! -d $DIR_BK ]; then
mkdir -p $DIR_BK
fi
# Inicio do backup
echo "MYSQLDUMP Iniciado em $DATA_INICIO" >> $LOG
# Loop para backupear todos os bancos
for db in "${DATABASES[@]}"; do
# Mysql DUMP
# Para backupear procedures e functions foi adicionado o --routines
mysqldump --routines -u$USER -p$PASS $db > $DIR_BK/$db'_'$DATA_ATUAL.sql
echo "Realizando backup do banco ...............[ $db ]" >> $LOG
# Compacta o arquivo sql em BZ2
bzip2 $DIR_BK/$db'_'$DATA_ATUAL.sql
done
DATA_FINAL=`date +%d/%m/%Y-%H:%M:%S`
echo "MYSQLDUMP Finalizado em $DATA_FINAL" >> $LOG
# Remove arquivos de backups antigos - 5 dias
find $DIR_BK -type f -mtime +5 -exec rm -rf {} \;
Conclusão
Lembre-se, sempre faça backup e restore dos seus backups... Tenha certeza que quando for precisar restaurar um banco, você tenha um backup confiável!
O que achou desse script? Se tiver alguma dúvida deixa um comentário que faço questão em ajudar!
Até a próxima!
Subscribe to my newsletter
Read articles from Aristides Neto directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
