#!/bin/bash # usage: backup_db dbname # Dump une base postgresql, et garde plusieurs dumps dans le passe # Les dumps sont compresses (gzip). # # E. Viennet pour ScoDoc, 2005-2011 # Note: pour restaurer un backup (en supprimant la base existante !!!) # 1- supprimer la base existante si elle existe (dropdb) # 2- recreer la base, vide: createdb -E UTF-8 NOMDELABASE # 3- pg_restore --create -d SCOINFO SCOINFO_pgdump # Nombre de copies a conserver dans le passe: NUMBACK=500 DBNAME=$1 DUMPBASE=BACKUP-"$DBNAME" DUMPFILE="$DUMPBASE"/"$DBNAME"_pgdump function remove_leadings_zeros { n=$1 if [ $n = "0000" ]; then echo 0 else while [ "${n:0:1}" = '0' ]; do n=${n:1} done echo $n fi } # Check if base pathname for backups exist if [ ! -e ${DUMPBASE} ]; then mkdir ${DUMPBASE} fi # 1- rotate previous dumps if [ -e ${DUMPFILE}.gz ] then LIST=$(ls -r1 ${DUMPFILE}*) fi for i in $LIST; do x=${i#*.} num=${x%.*} # just the number num=$(remove_leadings_zeros $num) if [ "$i" != "$DUMPFILE".gz ]; then if [ $num -lt $NUMBACK ]; then # rename file base=${i%%.*} ni=$(($num+1)) mv $i "$base".$(printf "%04d" $ni).gz else # remove file rm $i fi fi done # rename last dump to .0000 if [ -e "$DUMPFILE".gz ] then mv "$DUMPFILE".gz "$DUMPFILE.0000.gz" fi # 2- dump #pg_dump "$DBNAME" > $DUMPFILE pg_dump --format=t "$DBNAME" -f $DUMPFILE gzip $DUMPFILE