Script de backup de banco de dados Mysql
Criando um script de backup de banco de dados Mysql feito em Shell Script
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: [email protected]
#
# 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!