GDH Press: Blog » Script simples para backup de servidores web
 
RSS

Script simples para backup de servidores web

junho 27, 2008 – 5:54 pm

A 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. :)

  1. 4 Responses to “Script simples para backup de servidores web”

  2. 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

  3. 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

  4. 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

  5. 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

Post a Comment