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