venerdì 12 dicembre 2014

Calendario dell'Avvento ITPUG: 12 Dicembre

Perché va bene avere la replica, HA e fratelli, ma un buon dump ha il
suo valore!
Penso che sia capitato piu' o meno a tutti di scrivere uno script shell per automatizzare il backup (dump) di uno o piu' database PostgreSQL. Personalmente io mi sono trovato nella situazione di scrivere (e riciclare) script di backup che creassero file il cui nome era parlante, includendo nome del database, data del backup, ora del backup, ecc. Il passo successivo è scrivere un ciclo che iteri su tutti i database nel cluster.
Una simile automazione si trova anche negli script che vengono installati automaticamente in una macchina FreeBSD (502.postgres); lo script fa esattamente quello che ho appena descritto, ovvero:

1) itera su tutti i database presenti nel cluster (andando a leggere il catalogo di sistema)
    SELECT datname FROM pg_database WHERE datname!='template0'

2) costruisce un file con il nome del database e la data attuale 
   now=`date "+%Y-%m-%dT%H:%M:%S"`
   ...
   file=${backupdir}/pgdump_${db}
_${now}

3) effettua il backup effettivo del database

   daily_pgsql_pgdump_args="-U ${daily_pgsql_user} -bF c"
   pg_dump ${daily_pgsql_pgdump_args} -f ${file} ${db}


Da notare l'uso del formato custom (opzione -F c) che consente il
restore parallelo qualora si voglia dare tutto in pasto a pg_restore.

Va anche detto che lo script in question effettua anche un dump usando
pg_dumpall (che poi viene compresso).

Lo script ha alcune spunti di riflessione interessanti, come ad esempio la protezione dei file di backup e la retention policy: tutti i file di backup giornalieri piu' vecchi di 7 (o della variabile ${daily_pgsql_savedays}) giorni vengono cancellati con l'uso di un find

find ... -a -mtime +${daily_pgsql_savedays} -delete


Insomma, questo script rappresenta un buon punto di partenza per la gestione schedulata dei backup, e ovviamente non si sostituisce ad altre tecniche e tecnologie piu' evolute. 

Sulla mailing list soci si è aperta una discussione con tanti spunti su come migliorare questo tipo di script, ad esempio aggiungendo logging via syslog, mount al volo dei file system di backup, controllo dello spazio disco, ecc.

Nessun commento: