Mi sono trovato però a dover creare uno script da inserire nelle operazioni pianificate di Linux (cron) per il salvataggio di alcuni database di postgress di Odoo (OpenERP) .
Lo script che allego deve essere lanciato con 3 parametri:
- Nome del DATABASE .
- Patch completa della cartella di destinazione dove salvare il dump del DB.
- Numero di Backup da mantenere .
Se la cartella impostata nel parametro 2 è una cartella di un servizio di Cloud tipo DropBox ( come nel mio caso ) oltre ad eseguire il DUMP del database lo si salva anche nella "nuvola" .
Lo script è il seguente:
#!/bin/bash
# _ _______ _______ _______ _______ _________
# ( ( /|( ____ \( )( ____ \( ____ \\__ __/|\ /|
# | \ ( || ( \/| () () || ( \/| ( \/ ) ( ( \ / )
# | \ | || (__ | || || || (__ | (_____ | | \ (_) /
# | (\ \) || __) | |(_)| || __) (_____ ) | | ) _ (
# | | \ || ( | | | || ( ) | | | / ( ) \
# | ) \ || (____/\| ) ( || (____/\/\____) |___) (___( / \ )
# |/ )_)(_______/|/ \|(_______/\_______)\_______/|/ \|
#
# SCRIPT PER LA CREAZIONE ED IL SALVATAGGIO DEI DATABASE DI POSTGRES
#
# s.zucchi@nemesix.it Ver.1.00 del 04-03-2015
#
#
# Primo Parametro obbligatorio, il nome del Database
if [ "$1" = "" ]
then
echo "Attenzione parametro Database mancante"
exit 1
else
DATABASE=$1
DATABASESQL=$DATABASE.sql
DATABASEZIP=$DATABASESQL.bz2
fi
# Parametri del programma PG_DUMP
#PGDUMPPAR="--format=c --no-owner --username=openerp --host=localhost"
PGDUMPPAR="--format=c --no-owner"
# Secondo parametro obbligatorio, la cartella di destinazione
if [ "$2" = "" ]
then
echo "Attenzione parametro cartella destinazione mancante"
exit 1
else
FOLDERBACKUP=$2
if [ ! -e $FOLDERBACKUP ]
then
echo "Attenzione Cartella $FOLDERBACKUP non trovata quindi la creo"
mkdir -p $FOLDERBACKUP
fi
cd $FOLDERBACKUP
fi
# Il terzo parametro non è necessario, se non impostato il suo valore è 10
if [ "$3" = "" ]
then
echo "Attenzione, parametro Numero Backup mancante, imposto 10"
NBACKUP=10
else
NBACKUP=$3
fi
# Se esiste rimuovo l'ultimo Backup
if [ -e $NBACKUP_$DATABASEZIP ]
then
rm $NBACKUP_$DATABASEZIP
fi
# Esegui il ciclo per spostare i vari Backup
for ((i=$NBACKUP; i > 1 ; i--))
do
if [ -e `expr $i - 1`_$DATABASEZIP ]
then
mv `expr $i - 1`_$DATABASEZIP $i'_'$DATABASEZIP
fi
LASTBACKUP=`expr $i - 1`_$DATABASEZIP
done
# Creo il DUMP del Database di postgres nella cartella temporanea
pg_dump $PGDUMPPAR $DATABASE >/tmp/$DATABASESQL
# Se esiste cancello il file zippato precedentemente per evitare che il comando bzip2 vada in errore.
if [ -e /tmp/$DATABASEZIP ]
then
rm /tmp/$DATABASEZIP
fi
# Lancio il comando bzip2 per comprimere il dump del database
bzip2 /tmp/$DATABASESQL
# Sposto il database nella cartella specificata tra i parametri.
if [ -e /tmp/$DATABASEZIP ]
then
mv /tmp/$DATABASEZIP $LASTBACKUP
else
echo "Attenzione file /tmp/$DATABASEZIP non trovato"
exit 1
fi
exit 0