Script simples para backup de servidores web

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.

Deixe um comentário

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

Qual o Resultado? *