Tutoriais & Dicas
Fazendo backups automáticos de bancos de dados mysql usando shell script e crontab | Fazendo backups automáticos de bancos de dados mysql usando shell script e crontab |
|
|
| Por Antonio Jozzolino | ||||||||||||||||||||||||||||||
| 03 de junho de 2008 | ||||||||||||||||||||||||||||||
|
Já faz alguns anos que utilizo o CVS e mais recentemente o SVN para controlar as versões dos projetos. A melhor definição que já ouvi é que estes sistemas funcionam como uma máquina do tempo, isto é, permitem que você resgate versões anteriores do seu código. Acabam funcionando como um backup também, embora esta não seja sua função prioritária. Ótimo. O código fica protegido. Mas e o banco de dados? Já faz um bom tempo também que automatizei a função de backup das tabelas mysql, através de shell scripts. Sempre gostei de programação batch, desde os tempos do velho DOS, devido à sua simplicidade, velocidade de criação e poder. Melhorei uma função que já usava e agora ela guarda as versões anteriores do banco de dados no próprio servidor, como se fosse um SVN para Mysql. Requerimentos:
Definindo as variáveis: #!/usr/bin/bash #Variables sr="localhost" #remote server lg="nome_do_usuario_do_mysql" #login name pw="senha" #password hs="all" #file name to store sql file bk="$HOME/dbackup" #path to store backup files nw=$(date "+%Y%m%d") #get date as string nb=60 #maximum number of files that will be keep A primeira linha é o caminho do interpretador do shell script. Varia conforme a configuração do servidor. Este que aparece é para a Dreamhost. Você vai precisar editar, colocando os seus valores nas seguintes variáveis:
Se quiser, mude estas aqui com os seus valores:
Agora, a funçao: function backup() { echo "Getting data from mysql server" mysqldump -u$lg -p$pw -h$sr --add-drop-table --quote-names --all-databases --add-drop-database > "$HOME/$hs.sql" echo "Compressing $fn.sql.gz file ..." gzip -f "$HOME/"$fn.sql if [ -d $bk ]; then continue else mkdir $bk fi cp -f "$HOME/"$hs.sql.gz "$bk/$nw.sql.gz" a=0 b=$(ls -t $bk) c=$nb for arq in $b; do a=$(($a+1)) if [ "$a" -gt $c ]; then rm -f "$bk/$arq" fi done } O comando mais importante aqui é o mysqldump. Com estes parâmetros, ele vai pegar todos os bancos de dados que estão no servidor definido na variável "sr". mysqldump -u$lg -p$pw -h$sr --add-drop-table --quote-names --all-databases --add-drop-database > "$HOME/$hs.sql" O próximo comando compacta o arquivo sql gerado no diretório definido pela variável $HOME. gzip -f "$HOME/"$fn.sql O comando a seguir é quase cosmético. Ele cria o diretório para você automaticamente, caso ele não exista: if [ -d $bk ]; then continue else mkdir $bk fi Então, ele copia o arquivo gzipado para o diretório de backup, usando a data do sistema para gerar o nome, no formato AAAAMMDD.sql.gz. Ex: 20080603.sql.gz: cp -f "$HOME/"$hs.sql.gz "$bk/$nw.sql.gz" E como não queremos estourar o limite do nosso espaço no servidor, o trecho a seguir faz a limpeza, deletando o arquivo de backup número $nb + 1, isto é, o arquivo mais velho criado anteriormente e de número maior do que o que você definiu na variável nb, ou seja, o 61 neste caso. a=0 b=$(ls -t $bk) c=$nb for arq in $b; do a=$(($a+1)) if [ "$a" -gt $c ]; then rm -f "$bk/$arq" fi done E para terminar, coloque na ultima linha do script: backup Salve em um arquivo, exemplo backup.sh, em formato texto puro, em formato UNIX (LF). Um editor gratuito que faz isto é o PSPAD. Agora acesse o shell do seu servidor e rode o crontab. crontab -e E coloque no final do arquivo a linha: 0 6 * * * sh /home/user/backup.sh Onde "home/user" é o caminho até seu arquivo backup.sh. Esta linha diz para seu servidor fazer uma cópia todo dia as 06:00 h. Se estiver usando o Nano como editor, tecle CRTL+o para salvar o arquivo, depois CRTL+x para sair. Para restaurar o banco, primeiro descompate-o, depois rode o mysq. gunzip -f "$HOME/dbbackup/nome_do_arquivo.sql.gz" mysql -uusuario -psenha -hlocalhost < "$HOME/dbbackup/nome_do_arquivo.sql" Para baixar o arquivo completo, clique aqui. Importante: não coloque o script em um diretório que possa ser acessado pelo público, já que os dados de acesso ao banco estão nele. Visto: 962
Escrever comentário
Powered by AkoComment Tweaked Special Edition v.1.4.6 |
||||||||||||||||||||||||||||||
| Última Atualização ( 03 de junho de 2008 ) | ||||||||||||||||||||||||||||||
| < Anterior | Próximo > |
|---|
| Imagens |
|---|
| Últimos comentários | ||||||||
|---|---|---|---|---|---|---|---|---|
|
| Ítens relacionados |
|---|
| Fique informado |
|---|
|
|