Servidor Linux


Backups automáticos mysql com shell script e crontab

Posted in Backup,MySQL,Shell Scripts por eduroges em junho 4, 2008
Tags: , , ,

Requerimentos:

  • Um servidor que permita você logar via  SSH.
  • O servidor precisa permitir que você rode scripts shell scripts e tenha acesso ao mysql via linha de comando.

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:

  • sr: nome do seu servidor, normalmente “localhost”, mas para a Dreamhost é sempre “mysql.dominio.com.br”
  • lg: nome do seu usuário do servidor mysql
  • pw: senha do seu usuário do servidor mysql

Se quiser, mude estas aqui com os seus valores:

  • hs: nome do arquivo temporário mysql
  • bk: nome do diretório onde ficarão armazenados as cópias do banco de dados. A variável $HOME deve ser mantida.
  • nb: número de cópias do banco de dados. Como a Dreamhost me dá mais de 20 gigas de espaço em disco, e todos os meus bancos somados e compactados ficam em 10 Mb, eu armazeno 60 cópias, uma para cada dia de dois meses.

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"

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.

Fonte: http://www.sgd.com.br

Anúncios

Dicas para compactar e descompactar arquivos

Posted in Backup,tar,zip por eduroges em abril 2, 2008
Tags:

Este é um pequeno guia rápido para que você possa compactar, descompactar e visualizar arquivos no console do linux.

Introdução

GZIP e TAR são dois utilitários muito usados no Linux para a compactação de arquivos. Muitos dos programas e documentos disponíveis na Internet para Linux, se encontram nestes formatos. Este tutorial mostrará como usar os recursos básicos destas duas ferramentas. (more…)

Backup com RSYNC sem senha

Posted in Backup por eduroges em fevereiro 2, 2008
Tags: , , ,

Introdução

Pode parecer estranho o título do tutorial. E é estranho mesmo. Mas pior seria o verdadeiro título como “rsync utilizando SSH sem que você tenha que digitar a senha de acesso todas as vezes que rodar o script”. Como este título seria muito grande, resolvi abreviar e explicar ao longo do tutorial.

Todos nós temos a necessidade de fazer cópias de segurança (ou backup) de informações, sejam estas entre estações e um servidor, entre servidores ou até mesmo entre estações. O Linux* conta com várias ferramentas interessantes para estas tarefas, sendo uma delas o rsync, um pequeno aplicativo que permite a cópia de arquivos de uma máquina para outra de forma segura.

Não estarei aqui discutindo como usar o rsync mas sim como permitir que um script acesse um servidor ou outra máquina sem que o usuário tenha que digitar a senha de acesso, podendo assim agendar o script para que seja executado de tempos em tempos. (more…)