Script de Vacuum para bancos PGSQL, full e analyze

De gutocarvalho.net

#!/bin/bash

#
# SCRIPT para fazer vacuum nos bancos de dados do PGSQL
#

#
# autor: jose.carvalho@terceirizado.mda.gov.br
# data da criacao: 2008-07-03
#

#
# pre-requesitos de pacotes:
# pgsqldump
# mailx
#

#
# como usar?
# configure as variaveis/constantes internas e execute-o
# ./pgsqlvacuum
#

#### variaveis/constantes ########################################################### 

host="localhost"                # nome do host
user="postgres"                     # nome de login

server=$(uname -a|awk '{ print $2 }')           # nome do servidor
email="monitoramento@dominio.gov.br"                                # email de destino do relatorio

bl="/tmp"               # diretorio de destino dos logs

be="template0|template1|postgres|"     # bancos que nao vao entrar no backup

nw=$(date +%Y%m%d.%H%M%S)               # variavel de hora
ln="$bl/pgsql.vacuum.$nw.log"           # formato do arquivo de log

_vacuumdb=$(which vacuumdb)             # caminho para comando pgsqldump
_psql=$(which psql)             # caminho para o comando pgdump

_mail=$(which mail)                     # caminho para comando mail

### verificando se voce é o usuario root ################################### 

if [ $(id -u) != "0" ];then
        echo -e "\nErro: este script precisa ser executado com usuario root..."
        echo -e "Ajuda: torne-se root, use o comando (su -) ou (sudo -s -H).\n"
        exit 1
fi

### verifica se as ferramentas do pgsql estao instalados ####################################

if [ ! -x $_vacuumdb ];then
        echo -e "\nErro: Este script não conseguiu encontrar o comando vacuumdb"
        echo -e "Ajuda: Corrija o caminho na variavel _vacuumdb\n"
        exit 1
fi

if [ ! -x $_pgsql ];then
        echo -e "\nErro: Este script não conseguiu encontrar o comando psql"
        echo -e "Ajuda: Corrija o caminho na variavel _pgsql\n"
        exit 1
fi

### verifica se o mailx esta instalado #################################### 

if [ ! -x $_mail ];then
        echo "Erro: Este script não conseguiu encontrar o comando mail" 
        echo "Ajuda: Corrija o caminho na variavel _mail"
        exit 1
fi

### verificando se existe o diretorio para armazenar os logs #############################
        
        if [ ! -d $bl ]; then
                echo -e "\nErro: o diretorio de logs nao existe!"
                echo -e "Ajuda: ajuste o conteudo da variavel bl\n"
                exit 1
        fi

### funcao de backup ##########################################################

function vacuum()
{
        echo -e "\nIniciando vacuum de bancos do pgsql... $(date +%Y%m%d.%H%M%S)\n" | tee -a $ln

        echo "Nome do servidor: $server"|tee -a $ln
        echo "O script esta ignorando os seguintes bancos: [ $be ]"|tee -a $ln
        echo "Buscando informacoes no pgsql server..." | tee -a $ln

        # fazendo vacumm banco a banco no pgsql
         for db in $($_psql --username=$user -h $host -l -t -A | cut -d\| -f1 | egrep -v $be); do
                echo -e "\nefetuando vacumm no banco: [ $db ]" | tee -a $ln
                $_vacuumdb --full --analyze $db
        done

        echo -e "\nVacuum finalizando em $(date +%Y%m%d.%H%M%S)...\n"|tee -a $ln
        
        # enviando e-mail
        echo -e "Enviando relatorio do procedimento via e-mail para: $email ...\n" |tee -a $ln
        mail -s "pgsql vacuum do servidor ( $server )" $email < $ln 

}

### rodando o script

vacuum
Ferramentas pessoais