Postgresql dump en bash

De BlaxWiki
Aller à la navigationAller à la recherche

Ce script de dump (agarik) est avancé, avec une rétention et purge des dumps. La fonction "send" est propre à la supervision sur cette plateforme et doit être supprimée (ou à adapter pour remonter une info).

#!/bin/bash
# Declaration des variables :
DATE=`date +%Y-%m-%d`
VISION="/opt/agarik/Vision/bin/bb_send_raw"
DISPLAY="supervision.agarik.com"
TARGET="$(hostname | sed -e 's/\./,/g')"
SERVICE="backup"
LOGDIR="/var/log/"
BIN_TMPWATCH="/usr/sbin/tmpwatch"
BIN_MKDIR="/bin/mkdir"
BIN_MV="/bin/mv"
BIN_PGDUMP="/opt/applis/postgresql/bin/pg_dumpall"
LIFE_MESSAGE="1560"
RETENTION_TIME="192" # en heures
PGSQLLOG="pgsqldump"
DUMP_LOG_PGSQL="/var/log/"$PGSQLLOG".log"
DESTDIR_PGSQL="/var/db_backup_pgsql/CURRENT/"
OLDESTDIR_PGSQL="/var/db_backup_pgsql/OLD"

# Supervision
Send()
{
 "${VISION}" "${DISPLAY}" "status+${LIFE_MESSAGE} ${TARGET}.${SERVICE} ${1} $(date) ${SERVICE} ${2}"
}

if [ ! -d $DESTDIR_PGSQL ]; then mkdir -p $DESTDIR_PGSQL;fi
if [ ! -d $OLDESTDIR_PGSQL ]; then mkdir -p $OLDESTDIR_PGSQL;fi

#  Purge des anciens dumps :
$BIN_TMPWATCH $RETENTION_TIME $OLDESTDIR_PGSQL

# Deplacement du dump de la veille dans OLD :
$BIN_MV $DESTDIR_PGSQL/* $OLDESTDIR_PGSQL/

# Execution du dump :
> $LOGDIR/"$PGSQLLOG".ok
> $LOGDIR/"$PGSQLLOG".error

exec 1> $LOGDIR/"$PGSQLLOG".ok
exec 2> $LOGDIR/"$PGSQLLOG".error


# Execution du dump
$BIN_PGDUMP -Upostgres -c 2> $LOGDIR/"$PGSQLLOG".error | gzip > $DESTDIR_PGSQL/dumppgsql_$DATE.sql.gz


if [ `find $DESTDIR_PGSQL -type f | wc -l` -gt 0 -a "`du -ks $DESTDIR_PGSQL | awk {'print $1'}`" -gt 7 ] ;
        then echo "dumps des bases OK"
                else echo "Attention probleme lors des dumps POSTGRESQL de cette nuit. Il n'y aucune base backupe ou leur taille est de zero" >> $LOGDIR/"$PGSQLLOG".error
fi

if [ -s $LOGDIR/"$PGSQLLOG".error ];
        then
                color=red
                echo "Le dump postgres ne s'est pas bien execute"
                Send "${color}" "$(cat $LOGDIR/"$PGSQLLOG".error)"
        else
                color=green
                echo "Le dump de toutes les bases Postgresql a ete realise avec succes."
                ls -lh $DESTDIR_PGSQL/ >> $LOGDIR/"$PGSQLLOG".ok
                Send "${color}" "$(cat $LOGDIR/"$PGSQLLOG".ok)"
fi

exit 0