forked from ScoDoc/ScoDoc
78 lines
1.4 KiB
Bash
Executable File
78 lines
1.4 KiB
Bash
Executable File
#!/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
|
|
|