Backup do banco de dados Postgresql
Publicado por Mauricio 19/11/2005
[ Hits: 16.498 ]
Homepage: http://www.mbmaciel.com
Shell script para fazer o backup do banco de dados do Postgresql. Ele gera um arquivo tar.gz com a estrutura e os dados separados.
Pode ser usado no modo interativo (necesário ter o dialog) ou passando parâmetros.
EX:
./backup_postgres meu_banco_de_dados
#!/bin/bash ####################################################################### # pontos de montagem dos diretorios #DESTINO="/var/lib/postgres/BACKUPS" DESTINO="/home/mauricio/scripts/postgres/BACKUPS" # data do dump DATADEHOJE=`date +%Y%m%d` # opcao define se o script roda em modo interativo ou nao, com a passagem do parametro OPCAO=${1:-"_INTERATIVO_"} ####################################################################### # acerta o PATH #PG_PATH="/usr/local/pgsql/bin" PG_PATH="/usr/bin" export PATH=$PATH:$PG_PATH: ####################################################################### # # funcao para executar o backup # ####################################################################### pgdump () { # pgdump "S" $DATABASE $DESTINO # implementa o debug, nao faz nada ou executa o script... DEBUG= ECHO="" if [ "$DEBUG" == "1" ] then ECHO="echo " fi DATABASE="$2" DESTINO="$3" DATADEHOJE=`date +%Y%m%d` PGDUMP="pg_dump" if [ "$1" == "S" ] then SCHEMA_MODE=" -s -C " SUFIXO="estrutura" fi if [ "$1" == "D" ] then # falta testar o blob... -b SCHEMA_MODE=" -a -C " SUFIXO="dados" fi # backup de todos if [ "$DATABASE" == "todos" ] then SCHEMA_MODE=`echo $SCHEMA_MODE|sed -e 's/ -C//g'` #SUFIXO="todos" DATABASE="todos" PGDUMP="pg_dump" fi cd cd $DESTINO # criar o diretorio de data... if [ ! -e "$DATADEHOJE" ] then mkdir $DATADEHOJE fi cd $DATADEHOJE ARQUIVO="${DATABASE}_${SUFIXO}.tar" # apaga o arquivo se ja existir if [ -e "$ARQUIVO" ] then echo "Ja existe o arquivo: $ARQUIVO. Removendo o traste..." rm -f $ARQUIVO fi # executa os comandos # se for backup de todos if [ "$DATABASE" == "todos" -o "$DATABASE" == "" ] then if [ -e "$ARQUIVO" ] then for DBT in `psql postgres -l --tuples-only| tr -s " "|sed -e 's/^ //g'|cut -f1 -d" "` do ARQUIVO="${DBT}.tar" eval "$ECHO $PGDUMP -C -Ft -U postgres -x > $ARQUIVO" vacuumdb $DBT done #rm -f $ARQUIVO fi eval "$ECHO $PGDUMP $SCHEMA_MODE -F t -U postgres -x > $ARQUIVO" chmod 600 $ARQUIVO else eval "$ECHO $PGDUMP $SCHEMA_MODE -F t -U postgres -x -f $ARQUIVO $DATABASE" chmod 600 $ARQUIVO fi # limpa backup antigo do mesmo dia if [ -e "$DATADEHOJE.tar" ] then rm -f $DATABASE.tar fi if [ -e "$DATABASE.tar.gz" ] then rm -f $DATABASE.tar.gz fi cria_tar $DATABASE $ARQUIVO } ####################################################################### ####################################################################### # # cria o tar dos bancos # ####################################################################### function cria_tar () { ARQUIVOTAR=$1".tar" ARQUIVOINC="$2" touch $ARQUIVOTAR tar rf $ARQUIVOTAR $ARQUIVOINC if [ "$?" == "0" ] then rm -f $ARQUIVOINC fi chmod 600 $ARQUIVOTAR } ####################################################################### if [ "$OPCAO" == "_INTERATIVO_" ] then ####################################################################### # dialogo com o usuario ####################################################################### DIALOG=dialog tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 if [ "`whoami`" == 'postgres' ] then TABELAS=`psql -l -t|sort|sed -e 's/ //g'|grep '[a-zA-Z]'|cut -f1 -d"|"|awk '{ printf "%s %s off ", $0, $0}'` else TABELAS=`su postgres -c "psql -l -t"|sort|sed -e 's/ //g'|grep '[a-zA-Z]'|cut -f1 -d"|"|awk '{ printf "%s %s off ", $0, $0}'` fi $DIALOG --backtitle "Portal do Voluntario" \ --title "< BACKUP DO POSTGRES >" --clear \ --radiolist "\nSelecione um banco para iniciar com o backup: (use ESPACO)\n\n${DESTINO}/${DATADEHOJE}" \ 20 65 10 \ todos TODOS_ABAIXO off $TABELAS \ 2> $tempfile retval=$? DATABASE=`cat $tempfile|sed -e 's/"//g'` case $retval in 0) # somente o esquema do banco pgdump "S" $DATABASE $DESTINO; # redefine a opcao DATABASE=`cat $tempfile|sed -e 's/"//g'`; # somente os dados pgdump "D" $DATABASE $DESTINO gzip -9 $DATABASE.tar;; 1) echo "Processo cancelado.";; 255) echo "Processo cancelado.";; esac else # modo nao interativo pgdump "S" $OPCAO $DESTINO; # redefine a opcao # somente os dados pgdump "D" $OPCAO $DESTINO gzip -9 $OPCAO.tar fi # ####################################################################### # fim
Redundância de dois links de internet
Criando vários usuários no LDAP a partir de um arquivo
Tradução de endereços de uma rede interna
Backup diario rotativo MySQL + Backup semanal mantendo uma cópia local e remota
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (4)
Ajuda Pra Melhoria do NFTABLES. (8)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (2)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (7)