Backup automático MySQL + arquivos do servidor web

Publicado por Antonio Schiavon (última atualização em 12/09/2012)

[ Hits: 14.029 ]

Homepage: fb.com/antonio.schiavon

Download 5541.bkp.sh




Criei este script a partir de buscas na web e até mesmo aqui no fórum, apesar de simples, facilita muito a nossa vida em relação a automatização dos backups. Utilizo este script para fazer backup de uma aplicação web em PHP com banco de dados MySQL utilizado na empresa na qual trabalho.

Funcionamento:

O script monta um pasta remota localmente, compacta a pasta do "sistema", exporta o banco do MySQL, cria uma pasta com a data atual na pasta montada e manda tudo lá pra dentro. Tudo usando variáveis para salvar nossas vidas. :)

Para que tudo funcione automaticamente, adicione uma regra no crontab (comando crontab -e) com o seguinte comando:

mm hh * * * sh /pasta/do/script/bkp.sh

Onde:
- mm = minuto
- hh = hora

Assim ele vai rodar o script todos os dias na hora que você configurou.

NÃO ESQUECER DE CONCEDER PERMISSÃO DE EXECUÇÃO NO SCRIPT:

chmod +x /pasta/do/script/bkp.sh

Como ele monta a pasta como cifs e autentica no AD, funciona tanto com pastas compartilhadas no GNU/Linux quanto no Windows, com AD ou com Samba.

Apesar de simples, o script é funcional.

Bom proveito a todos.

  



Esconder código-fonte

#!/bin/bash
#########################
#               Script criado por             #
#              Antonio Schiavon             #
#               Em 03/09/2012               #
#########################

# AQUI DEFINIMOS AS VÁRIAVEIS NECESSÁRIAS (substitua os valores pelos respectivos dados de acesso a pasta remota).
data=$(date '+%d-%m-%Y')
dominio="dominio.com.br"
user="administrador"
senha="123456"
pastaremota="//servidor/pasta/"
pastalocal="/mnt/servidor/pasta/"
pastasistema="/var/www/sistema/"
pastatemp="/var/bkp"
ipbanco="localhost"
userbanco="root"
senhabanco=""
nomedobanco="sistema"

# AQUI MONTAMOS A PASTA REMOTA LOCALMENTE
mount -t cifs $pastaremota $pastalocal -o domain=$dominio,username=$user,password=$pass,iocharset=utf8,file_mode=0777,dir_mode=0777

# VERIFICAMOS SE PASTA TEMPORÁRIA DO BKP EXISTE, SE NÃO CRIA E ENTRA NELA, SE SIM SÓ ENTRA.
if [ -d $pastatemp ]; then
cd $pastatemp
else
mkdir $pastatemp
cd $pastatemp
fi

# EXTRAI DADOS DO MYSQL
mysqldump --host=$ipbanco --user=$userbanco --password=$senhabanco --databases $nomedobanco > banco-$data.sql #PODE USAR '--all-databases' APÓS 
'banco-$data.sql' PARA FAZER BKP DE TODOS OS BANCOS

# COMPACTA ARQUIVOS DO SISTEMA
zip -r fontes-$data.zip $pastasistema

# CRIA PASTA DO DIA ATUAL E MOVE ARQUIVOS PARA ELA
if [ -d $pastalocal/bkps_sistema ]; then
mkdir $pastalocal/bkps_sistema
mkdir $pastalocal/bkps_sistema/$data/
mv banco-$data.sql $pastalocal/bkps_sistema/$data/
mv fontes-$data.zip $pastalocal/bkps_sistema/$data/
else
mkdir $pastalocal/bkps_gepros/$data/
mv banco-$data.sql $pastalocal/bkps_sistema/$data/
mv fontes-$data.zip $pastalocal/bkps_sistema/$data/
fi 

Scripts recomendados

Baixar fontes em massa utilizando o terminal Linux

Equacao de Segundo Grau em Dialog

LogPac

Extrair arquivos pelo Nautilus com 7z e Yad

Check bandwidth para Nagios


  

Comentários
[1] Comentário enviado por usuariodebian em 17/12/2012 - 12:51h

Eu tenho o MYSQL em servidor remoto e gostaria de arquivar os backups também diretamente na rede, mas em outro servidor. De modo que preciso realizar dois logins. Como seria o ajuste no script para fazer isso?

[2] Comentário enviado por cfas21 em 10/12/2014 - 19:56h

boa tarde. sou iniciante em linux e tenho uma duvuda. como defino a pasta remota e a pasta local. quais seriam as duas?e se a pasta temp pode ser a mesma que esta definida no exempo?

[3] Comentário enviado por aschiavon em 11/12/2014 - 10:47h


[2] Comentário enviado por cfas21 em 10/12/2014 - 19:56h:

boa tarde. sou iniciante em linux e tenho uma duvuda. como defino a pasta remota e a pasta local. quais seriam as duas?e se a pasta temp pode ser a mesma que esta definida no exempo?


Opa, bom dia!

Para definir as pastas, você precisa somente alterar as váriáveis no começo do código, por exemplo:
pastaremota="//192.168.1.1/backup/sistema" (pasta onde ficaram armazenados os backups)
pastalocal="/mnt/backup/sistema" (pasta onde a pasta remota será montada)
pastasistema="/var/www/sistema/" (pasta onde está localizado os arquivos do sistema que será backupado)
pastatemp="/var/bkp" (pasta onde será armazenado os arquivos temporáriamente até o termino do backup)

e sim, a pasta temp pode ser a mesma, só não esqueça de criar ela (mkdir /var/temp)

[4] Comentário enviado por eugeniotelles em 15/03/2021 - 12:52h

Cara, muito obrigado por esse script! Saiba que mesmo depois de tantos anos que você publicou o script, ele ainda ajuda pessoas como eu! hehehe

Não sou desenvolvedor, nem usuários Linux, então seu script me salvou legal. Eu ainda adicionei um script que peguei de outro lugar para excluir arquivos com data superior a 7 dias:

# APAGA ARQUIVOS COM MAIS DE 7 DIAS
cd $pastatemp
find -mtime +7 -delete

Fica aí a contribuição e muito obrigado, mais uma vez!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts