sabato 7 marzo 2015

Script per il Backup di un Database Postgres

Ne ho fatti a migliaia di script del genere e non ne ho mai condiviso nessuno.
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:

  1. Nome del DATABASE .
  2. Patch completa della cartella di destinazione dove salvare il dump del DB.
  3. Numero di Backup da mantenere .
Lanciando lo script con i parametri corretti si otterrà un file tipo 1_NOMEDB.sql.bz2 dove 1_ è l'ultimo backup 2_NOMEDB.sql.bz2 il penultimo e così via in base al numero impostato come terzo parametro.
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