Différences entre les versions de « Postgresql dump en bash »
De BlaxWiki
Aller à la navigationAller à la recherche| Ligne 1 : | Ligne 1 : | ||
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). | Ce script de dump (agarik) est avancé, avec une rétention et purge des dumps, backup base par base. La fonction "send" est propre à la supervision sur cette plateforme et doit être supprimée (ou à adapter pour remonter une info). | ||
<pre> | <pre> | ||
| Ligne 13 : | Ligne 13 : | ||
BIN_MKDIR="/bin/mkdir" | BIN_MKDIR="/bin/mkdir" | ||
BIN_MV="/bin/mv" | BIN_MV="/bin/mv" | ||
BIN_PGDUMP="/opt/applis/postgresql/bin/ | BIN_PGDUMP="/opt/applis/postgresql/bin/pg_dump" | ||
LIST_BASE_PGSQL="$(/bin/su - postgres -c "psql -l" | awk '{ print $1}' | sed "1,3d" | grep -vE 'List|template|:|\(' | sed -e '/^$/d')" | |||
LIFE_MESSAGE="1560" | LIFE_MESSAGE="1560" | ||
RETENTION_TIME="192" # en heures | RETENTION_TIME="192" # en heures | ||
| Ligne 44 : | Ligne 45 : | ||
for d in $LIST_BASE_PGSQL | |||
/bin/su - postgres -c $BIN_PGDUMP 2> $LOGDIR/"$PGSQLLOG".error | gzip > $DESTDIR_PGSQL/ | do | ||
# | /bin/su - postgres -c "$BIN_PGDUMP $d" 2> $LOGDIR/"$PGSQLLOG".error | gzip -c > $DESTDIR_PGSQL/$d.$DATE.out.gz | ||
#$BIN_PGDUMP -Upostgres -c 2> $LOGDIR/"$PGSQLLOG".error | gzip > $DESTDIR_PGSQL/dumppgsql_$DATE.sql.gz | # Si ca ne passe pas, il faut faire un : | ||
# $BIN_PGDUMP $d -Upostgres -c 2> $LOGDIR/"$PGSQLLOG".error | gzip > $DESTDIR_PGSQL/dumppgsql_$DATE.sql.gz | |||
done | |||
Version actuelle datée du 27 avril 2012 à 12:59
Ce script de dump (agarik) est avancé, avec une rétention et purge des dumps, backup base par base. 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_dump"
LIST_BASE_PGSQL="$(/bin/su - postgres -c "psql -l" | awk '{ print $1}' | sed "1,3d" | grep -vE 'List|template|:|\(' | sed -e '/^$/d')"
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
for d in $LIST_BASE_PGSQL
do
/bin/su - postgres -c "$BIN_PGDUMP $d" 2> $LOGDIR/"$PGSQLLOG".error | gzip -c > $DESTDIR_PGSQL/$d.$DATE.out.gz
# Si ca ne passe pas, il faut faire un :
# $BIN_PGDUMP $d -Upostgres -c 2> $LOGDIR/"$PGSQLLOG".error | gzip > $DESTDIR_PGSQL/dumppgsql_$DATE.sql.gz
done
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