Script simples para backup de servidores web
junho 27, 2008 – 5:54 pmA forma mais simples de fazer backup das bases de dados do MySQL é simplesmente salvar o conteúdo da pasta "/var/lib/mysql", criando um arquivo .tar.gz ou mesmo copiando os arquivos diretamente para outra partição. O maior problema é que as bases de dados são alteradas continuamente durante a operação do banco de dados, o que leva a cópias inconsistentes. Se alguns dos arquivos dentro da pasta com a base mudam no meio da cópia, o backup conterá uma mistura de dados novos e antigos, uma receita para o desastre.
A forma mais segura é parar o serviço do MySQL antes de fazer o backup, garantindo assim que nada será alterado durante a cópia, como no exemplo abaixo:
# /etc/init.d/mysql stop
# tar -zcvf mysql.tar.gz /var/lib/mysql/
# /etc/init.d/mysql start
Um exemplo de script de backup simples para fazer um backup completo dos arquivos da pasta "/var/www", contendo os arquivos de todos os sites hospedados no servidor e também da base de dados do MySQL, incluindo as datas em que os backups foram realizados nos nomes dos arquivos seria:
#!/bin/sh
# Acessa a pasta onde os backups serão salvos
cd /var/backup
# Cria uma variável contendo a data atual
DATA=`date +%Y-%m-%d-%H.%M`
# Faz backup da pasta /var/www
tar -zcvf www-$DATA.tar.gz /var/www
# Para o MySQL e faz backup das bases de dados
/etc/init.d/mysql stop
tar -zcvf mysql-$DATA.tar.gz /var/lib/mysql
/etc/init.d/mysql start
Ao executar o script, você teria dois arquivos, como em "www-2008-06-27-07.21.tar.gz" e "mysql-2008-06-27-07.21.tar.gz". Veja que a data incluída nos nomes dos arquivos propositalmente contém (além da data) também a hora e os minutos em que foram gerados, de forma que você saiba exatamente quando os arquivos foram gerados e obtenha sempre arquivos de nomes diferentes, mesmo que o script seja executado várias vezes em sequência.
Para automatizar a execução do script, você pode adicionar uma entrada no arquivo "/etc/crontab", como em:
59 4 * * * root /usr/local/bin/script-backup
Esta entrada faria com que o script fosse executado todos os dias às 4:59 da manhã, sempre gerando dois novos arquivos com a data de quando foram executados. Com isso, ficaria faltando apenas copiar ou mover os arquivos regularmente para outro servidor, onde eles forem ficar arquivados.
A limitação deste script é que ele desativa temporariamente o servidor MySQL, causando alguns segundos (ou minutos) de downtime. É possível fazer um backup online, sem parar o servidor usando o mysqldump, mas isso já é tema para outro post. :)







4 Responses to “Script simples para backup de servidores web”
Valeu grande mestre!!
Essa do MySQL “/var/lib/mysql”, eu não sabia.
Obrigado e parabéns pelo trabalho.
A propósito comprei o seu novo livro de Servidores. A data de lançamento é só para Agosto mesmo?
Abraço.
By Tomas on jun 28, 2008
A previsão para o lançamento do livro é dia 13/08, mas estamos fazendo o possível para que ele saia um pouco antes. Estou trabalhando na revisão de um dos últimos capítulos neste exato momento. :)
By Carlos Morimoto on jun 28, 2008
Excelente tutorial.
Estou curisoso para esse próximo post, de como fazer sem parar o serviço.
Para quem tem mais servidores, pode sincronizar usando o rsync, ficando com o backup mais seguro.
Aproveitando o post, gostaria de sugerir matérias de alta disponibilidade, cluster, etc. Por exemplo, o que é melhor, fazer um balanceamento com software ou com hardware?
Abraços.
By Bruno on jun 28, 2008
Voçes poderiam colocar a opção de "Enviar essa dica Por e-mail".
Pra gnt mandar pros colegas….
Abraços,
Agnel Póvoa
Palmas-TO
By Agnel Póvoa on jun 30, 2008