Script Linux Bash per backup - PostgreSQL

Ho litigato negli ultimi giorni per il backup sul mio server linux con fedora dei diversi database che ospito. Nel caso a qualcuno possa interessare, ecco lo script per bash.
*********************************************************************
#!/bin/bash

BACKUP_DIR="/dir/backup"
DATE=`date +%d-%m-%Y`
YEARMONTH_DIR=`date +"psql-%Y-%m"`
PGUSER="postgres"

function pg_backup_database
{
DB=$1
echo $1
if [ ! -d $BACKUP_DIR/$YEARMONTH_DIR ]; then
echo "...Making dir: $BACKUP_DIR/$YEARMONTH_DIR";
mkdir $BACKUP_DIR/$YEARMONTH_DIR;
fi
/usr/bin/pg_dump -d -v -O -S postgres -f $BACKUP_DIR/$YEARMONTH_DIR/$DB-$DATE.pgd -Fc $DB -U $PGUSER
}

if [ -n "$1" ]; then
pg_backup_database $1
else

DB_LIST=`/usr/bin/psql -l -t |/bin/cut -d'|' -f1 |/bin/sed -e 's/ //g'`
for DB in $DB_LIST
do
if [ "$DB" != "template0" ] && [ "$DB" != "template1" ]; then
pg_backup_database $DB
fi
done
fi

tar zcvf $BACKUP_DIR/$YEARMONTH_DIR/psql_$DATE.tgz $BACKUP_DIR/$YEARMONTH_DIR/*.pgd
rm -rf $BACKUP_DIR/$YEARMONTH_DIR/*.pgd

************************************************************

Chiamate il file come volete e poi fategli un bel chmod 755 (non verrete mica che altri lo possano eseguire) (quindi che l'owner sia esclusivamente il root!)
Il suo funzionamento:

Se passate il nome del database, fa un backup del singolo.
Se non passate alcun parametro, fa un backup di tutti gli schema presenti.
Per prima cosa, voglio avere questi backup ben ordinati, suddivisi in cartelle per ogni mese.
Se non esiste $YEARMONTH_DIR , la crea.
Salva qui dentro un file tgz per ogni giorno con l'indicazione del giorno ( psql_$DATE.tgz )
I file poi possono essere resumati con un pg_restore
Buon divertimento!

ps: sono a disposizione per chiarimenti :)

Nessun commento: