quarta-feira, abril 7

Estudos de Linux - Backup de bases de dados Postgre

Recentemente passei por maus bocados depois que um servidor passou por problemas no sistema de arquivos que causaram perca de dados recentes, depois disso resolvi usar uma ferramenta que criasse uma cópia do servidor inteiro, para recuperá-lo caso seja necessário.

Pré-requisitos:

  • libnotify para exibir um balão de alerta quando o backup estiver em andamento (Não obrigatório).

    Instale pelo console com sudo apt-get install libnotify-bin ou clicando aqui caso esteja usando o firefox no ubuntu.

  • postgresql-client para ter a ferramenta pg_dumpall que vamos usar no script (Obrigatório).

    Instale pelo console com sudo apt-get install postgresql-client ou clique aqui.

O Script:

#!/bin/sh
pgu="postgres" #O usuário do banco de dados
pgh="localhost" #O endereço do servidor
destin="/home/usuario/backup/" #O local onde será feito o backup
vYear=$(date +%Y) #O Ano
vMonth=$(date +%m) #O Mês
vDay=$(date +%d) #O Dia
vH=$(date +%H) #A Hora
vM=$(date +%M) #O minuto
fileName="auto-$pgh-$vDay.$vMonth.$vYear.$vH.$vM.backup" #O nome do arquivo do backup
fileError="auto-$pgh-$vDay.$vMonth.$vYear.$vH.$vM.error" #O nome do arquivo do backup
icon="/usr/share/icons/gnome/scalable/actions/gtk-refresh.svg" #O icone da notificação
startMsg="Está sendo efetuado um backup do servidor $pgh para o arquivo $destin$fileName!" #Mensagem de inicio
endMsgSuccess="O backup do servidor $pgh para o arquivo $destin$fileName foi efetuado com sucesso!" #Mensagem de término com sucesso
endMsgFail="Houve uma falha no backup do servidor $pgh para o arquivo $destin$fileName." #Mensagem de término com falha

#Iniciando...

echo $startMsg
if [ $(which notify-send) ]; then
notify-send "Backup Postgre" "$startMsg" -i $icon
fi

#Copiando...
pg_dumpall -U $pgu -h $pgh > $destin$fileName 2>$destin$fileError
s=$?
if [ $s != 0 ]; then
    echo $endMsgFail
    if [ $(which notify-send) ]; then
        notify-send "Backup Postgre" "$endMsgFail" -i $icon
    fi
    error=$(cat $destin$fileError)
    zenity --error --window-icon="$icon" --title="Backup Postgre" --text="$endMsgFail\nDetalhes:\n$error"
    exit 1;
else
    echo $endMsgSuccess
    if [ $(which notify-send) ]; then
        notify-send "Backup Postgre" "$endMsgSuccess" -i $icon
    fi
    zenity --notification --window-icon="$icon" --title="Backup Postgre" --text="$endMsgSuccess"
    exit 0;
fi

Salve esse arquivo como backuper.sh (ou o nome que achar melhor) e depois altere as suas permissões para execução.
chmod +x backuper.sh
Ai é só executá-lo pelo prompt usando ./backuper.sh.

No próximo post vou ensinar como fazer o script ser executado automáticamente e periodicamente.

Até mais.

Update

Dei uma tunada no script e agora ele faz clonagem de servidores Postgre
No terminal, execute os comandos:
wget http://dl.dropbox.com/u/4917466/pgclone
sudo mv pgclone /bin/pgclone
sudo chmod 777 /bin/pgclone
Agora quando for usar basta digitar no terminal um dos comandos abaixo
pgclone Faz uma cópia do servidor localhost com o usuário postgres
pgclone -u usuario -h host Faz uma cópia do servidor "host" com o usuario "usuario"
pgclone --clone --clone-user usuario --clone-host host Faz uma clonagem do servidor localhost no servidor "host"

Nenhum comentário: