você está aqui: Home  → Arquivo de Mensagens

Backup simples entre dois servidores na web

Colaboração: Cesar Brod e Joice Käfer

Data de Publicação: 10 de Julho de 2009

Quem conhece a BrodTec sabe que a empresa funciona, de fato, no local onde estão seus sócios com seus respectivos notebooks e uma conexão à Internet. Assim, processos locais automatizados de backup são legais, mas quem é que garante que, enquanto estamos fora do escritório uma máquina não irá ter problema, nossa conexão à Internet não irá cair ou faltará luz? Normalmente temos como acompanhar remotamente o que está acontecendo, mas a recuperação de uma situação deste tipo, dependendo de sua gravidade, irá requerer nossa presença no escritório, o que nem sempre é possível em um curto espaço de tempo. Assim, pensamos em uma solução simples, que traduz-se em um único script, que irá fazer um backup dos sites que temos em nosso cloud, na Locaweb, para um outro espaço, na mesma empresa, que hospeda o site da BrodTec. Assim, não importa onde estamos, temos acesso aos nossos backups. Claro que o script abaixo não terá nenhuma novidade para os mais experientes, afinal, ele reúne uma série de coisas que são facilmente encontráveis em mecanismos de busca. Os comentários nele devem ser suficientemente auto-explicativos.

Este script está localizado na pasta /usr/local/bin em nosso cloud:

  #!/bin/bash
  # Script para backups dos portais dinâmicos hospedados no cloud da BrodTec
  #
  # by CB, 23/06/2009 13h57
  
  # Primeiro, apagamos os backups anteriores, que já foram transferidos para o ambiente remoto
  
  rm -Rf /pasta-local-dos-backups/*
  
  # Agora compactamos as pastas locais
  
  # A variável abaixo cria uma string de data a ser adicionada ao nome do arquivo
  # Respeite aspas duplas, simples e crases para que surta o efeito desejado
  
  DATE="`date '+%d%m%Y_%Hh%M'`"
  
  tar -czvf "/pasta-local-dos-backups/portal1_$DATE.tgz" /var/portal1/
  tar -czvf "/pasta-local-dos-backups/portal2_$DATE.tgz" /var/portal2/
  
  # Agora fazemos o dump geral de todas as bases de dados em nosso mysql
  # Substitua dbuser e password apropriadamente, de acordo com o seu ambiente
  
  mysqldump -u dbuser -ppassword --all-databases > "/pasta-local-dos-backups/todabase_$DATE.sql"
  
  # Compacta o dump da base para diminuir a carga no ftp
  
  tar -czvf "/pasta-local-dos-backups/todabase_$DATE.sql.tgz" "/pasta-local-dos-backups/todabase_$DATE.sql"
  
  # Apaga o arquivo descompactado
  
  rm "/pasta-local-dos-backups/todabase_$DATE.sql"
  
  # Nota: Caso precise recuperar esta base integralmente, o comando a ser executado é o seguinte
  # mysql -u dbuser -ppassword < todabase_(data).sql
  # Substitua (data) pela que está no nome do arquivo que se deseja restaurar
  
  # Agora, a parte de envio dos arquivos para uma máquina externa
  # Nota: este script usa a informação em /root/.netrc para usuário e senha do ftp
  # Caso este arquivo não exista, ele deve ser criado com a linha abaixo, caso
  # ele exista, a linha deve ser acrescentada:
  #
  # machine ftp.remoto.com login user password "password"
  #
  # Substitua apropriadamente ftp.remoto.com, user e password
  #
  # Modifique as linhas abaixo de acordo com os arquivos que deseja transferir
  
  /usr/bin/ftp ftp.remoto.com <<__end
  lcd /pasta-local-dos-backups
  cd backups
  bin
  prompt off
  mput *.tgz
  quit
  __end
  
  # FIM

Agora, obviamente, queremos que este script seja executado automaticamente. Em nosso caso, ele tem o nome backupweb.sh, assim, primeiro o transformamos em um executável:

  chmod +x /usr/local/bin/backupweb.sh

Agora, devemos colocá-lo em nossa crontab para ser executado, por exemplo, as 12h30 e 00h30. Como nunca lembramos a sintaxe da crontab, contamos com a ajuda do Crontab Entry Generator e descobrimos que as linhas a serem inseridas com o comando crontab -e são as seguintes:

  30 12 * * * /usr/local/bin/backupweb.sh
  30 00 * * * /usr/local/bin/backupweb.sh

Obviamente, para que tudo isto funcione, você deve ter acesso como usuário root na máquina de onde está originando os backups (em nosso caso, nosso cloud) e também ter usuário e senha no servidor ftp apropriado.


Cesar Brod ministra cursos in-house adequados à necessidade de sua empresa, além de atuar como coach de equipes ágeis. Visite nosso portal para saber mais ou entre em contato diretamente com o autor para mais informações.



 

 

Veja a relação completa dos artigos de Cesar Brod e Joice Käfer

Opinião dos Leitores

Xinuo
18 Fev 2013, 15:06
Minha experiência com informática me diz que a seguinte linha:

DATE="`date '+%d%m%Y_%Hh%M'`"

ficaria melhor dessa forma:

DATE="$(date '+%Y%m%d_%Hh%M')"

A primeira substituição é o uso dos parênteses e cifrão no lugar dos acentos graves, pois melhora a legibilidade. A segunda mudança é a colocação da data no formato AnoMêsDia (AAAAMMDD), para que a classificação natural do diretório deixe os arquivos na ordem de criação. Esse último acerto não é tão grave no script proposto, mas já vi programadores se darem mal por não entenderem as consequências de armazenarem (geralmente em banco de dados) campos do tipo data noutros formatos, como DDMMAAAA ou MMDDAAAA.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script