Abaixo temos um script em bash (para Linux) que realiza o backup da base de dados wpdatabase em um arquivo .SQL, logo depois ele compacta o arquivo .SQL na extensão tar.gz. Por opção utilizo o RSYNC, disponível na maioria das distribuições linux, ele me permite enviar os arquivos para outro servidor linux de uma maneira confiável e prática, como pode ver no script. As linhas com o comando ECHO servem para registrar o horário da ocorrência do evento no arquivo “/var/log/backup.log”, sendo útil para uma análise posterior.

backup-mysql-wpdatabase.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
#
#  BACKUP DATABASE WPDATABASE (WORDPRESS)
#
dateLog=`date +%Y-%m-%d_%H-%M`

echo "|$dateLog| |INICIANDO| |BKP WPDATABASE DB|" >> /var/log/backup.log
mysqldump wpdatabase > /tmp/wpdatabase.sql
env GZIP=-9 tar czf "/tmp/$dateLog""_wpdatabase.tar.gz" "/tmp/wpdatabase.sql"
rsync -tpuv "/tmp/$dateLog""_wpdatabase.tar.gz" root@10.0.0.200:/backup/bancos/wordpress/
dateLog=`date +%Y-%m-%d_%H-%M`
echo "|$dateLog| |ENCERRANDO| |BKP WPDATABASE DB|" >> /var/log/backup.log

Você pode perceber que os arquivos gerados não são apagados da origem. Isso acontece também por opção. Apesar de meu servidor de backup possuir discos espelhados com os arquivos de backups, ainda aumento a segurança mantendo os arquivos locais durante um determinado período, no qual eu realizo o cálculo através do tamanho do arquivo de backup e do espaço em disco disponível.

Logo tenho um segundo script responsável pela limpeza dos arquivos que já podem ser descartados para liberar espaço para os backups mais recentes.

elimina-backups-obsoletos.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
#
# Script Limpeza Backups Obsoletos | elimina-backups-obsoletos.sh
#
date=`date +%Y-%m-%d_%H-%M`

echo "|INICIANDO| |LIMPEZA_BKP_OBSOLETOS| |$date|" >> /var/log/backup.log
#REMOVE BACKUPS OBSOLETOS ARQUIVOS (DIAS ESPECIFICOS PARA CADA PASTA)
find "/tmp/*tar.gz" -type f -mtime +35 -exec rm -f {} \;
date=`date +%Y-%m-%d_%H-%M`
echo "|ENCERRANDO| |LIMPEZA_BKP_OBSOLETOS| |$date|" >> /var/log/backup.log

Nesse script, assim como no anterior, é sempre registrado o horário do acontecimento, tanto do início do script quanto do final, ele procura todos os arquivos com a extensão “tar.gz” e remove os possuem a data de criação maior do que 35 dias atrás.

/etc/crontab

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

10 23 * * * bkpuser /scripts/backup-mysql-wpdatabase.sh
50 23 * * * bkpuser /scripts/elimina-backups-obsoletos.sh

Para fazer com que sejam rodados automaticamente pelo sistema (Exemplo feito no CentOS), basta editar o arquivo “/etc/crontab”, que é o exemplo acima, e colocar as linhas 17 e 18. Cada linha informa os 7 parâmetros necessários que são (seguindo a ordem) Minuto(0-59), Hora(0-23), Dia do mês (1-31), Mês (1-12), Dia da semana (0-6 sendo que 0=Domingo), usuário que será utilizado (no caso ‘bkpuser‘) e o caminho ou comando a ser executado.

Vale lembrar que é preciso dar permissão de execução dos arquivos criados com o comando abaixo:

chmod +x /script/backup-mysql-wpdatabase.sh

Feito isso, você pode monitorar o arquivo de log da seguinte maneira, o parâmetro “n” é a quantidade de linhas que ele irá exibir, caso queira deixar um terminal para sempre mostrar em tempo real, mude o parâmetro “n” para apenas “f“:

tail -n50 /var/log/backup.log
# ou use -f para ficar monitorando em tempo real, ficando assim:
tail -f /var/log/backup.log

2 thoughts on “SCRIPT BASH PARA BACKUP DE ARQUIVOS E/OU BANCO DE DADOS”

  1. Boa Tarde, estou com um certo problema.. Estou elaborando um trabalho no Linux, e preciso criar um Backup de maquinas virtuais automatizados, e que isso seja listado em documento de texto, mostrando os registros de atividades de logs das maquinas virtuais em documento de texto.. enviando tudo para a maquina hospedeira. Qual seria a melhor forma de criar esses scripts em shell e tambйm listar as atividades das maquinas virtuais para o hospedeiro?? Desde jб agradeзo..

    1. Olá amigo, eu ainda não realizei um procedimento como este, acredito que vc deva analisar o processo de snapshots de maquinas virtuais para tentar fazer isso. A única coisa que faço por enquanto é uma rotina de backups individuais em cada MV salvando o que é importante como configurações e serviços na própria MV. Em segundo passo, fica a rotina do meu servidor de backup que identifica esses arquivos e copia para o diretório de backup. Espero ter ajudado, boa sorte nesse trabalho!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *