forked from ScoDoc/DocScoDoc
78 lines
1.4 KiB
Plaintext
78 lines
1.4 KiB
Plaintext
|
#!/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
|
||
|
|