Vytovaranie pravidelnych zaloch pre postgresql s rozdelenim na:
Pripravene pre spustanie pod uzivatelom postgresql s definovanim vsetkych databaz na servery, ktore je potrebne takto zalohovat.
0 * * * * /var/lib/postgresql/bin/pg_dump.sh > /tmp/pg_dump.sh.log 2>&1
#!/bin/bash # 22.11.2011 #vytvorenie zaloh databazy #1) tyzdenna zaloha #2) denna zaloha #3) hodinova zaloha date echo "ZACIATOK" #zoznam databaz ZALOHUJ_DB="db1 db2 db3" # nastavenia DIR=/opt/pg_dump #nastavenie zalozneho adresara DIR1=$DIR/tyzdenna #nastavenie adresara tyzdennych zaloh DIR2=$DIR/denna #nastavenie adresara dennych zaloh DIR3=$DIR/hodinova #nastavenie adresara hodinovych zaloh DIR1_MAX=200 #maximalny pocet uchovavanych tyzdennych zaloch DIR2_MAX=60 #maximalny pocet uchovavanych dennych zaloch DIR3_MAX=48 #maximalny pocet uchovavanych hodinovych zaloch ################## #vymazanie starych suborov nad maximalny pocet function vymaz_subor() { #vstup 1: adresar ADRESAR=$1 #vstup 2: maximalny pocet MAX=$2 echo "vymaz_subor($ADRESAR, $MAX)" #kontrola, ci existuje adresar if [ ! -d "$ADRESAR" ]; then echo "ERROR: nespravny vstup 1, neexistuje adrear - $ADRESAR" return 0 fi echo "mazem z: $ADRESAR" #kontrola, ci je max vacsie ako 0 if [[ $MAX -le 0 ]]; then echo "ERROR: nespravny vstup 2, maximalny pocet suborov - $MAX" return 0 fi #ziskaj zoznam suborov POCET=`ls $ADRESAR/* | wc -l | sed -e 's/ //g'` echo "aktualny pocet: $POCET" #ak je pocet vacsi ako maximum if [[ $POCET -gt $MAX ]]; then #vypocet, kolko suborov sa ma vymazat VYMAZ=`expr $POCET - $MAX` echo "mazem pocet: $VYMAZ" #vytvorenie zoznamu suborov pre vymazanie SUBOR=`ls -tr $ADRESAR/* | head -$VYMAZ` #vymazanie suborov rm -f $SUBOR fi } ####################### #rozposielanie suborov DAY=`date "+%u"` #POZOR format 1-7 HOD=`date "+%H"` #POZOR format 00-23 #tyzdenna zaloha if [[ $DAY = 1 && $HOD = 00 ]] ; then echo "TYZDENNA ZALOHA" DIR=$DIR1 DIR_MAX=$DIR1_MAX #denna zaloha else if [[ $HOD = 00 ]] ; then echo "DENNA ZALOHA" DIR=$DIR2 DIR_MAX=$DIR2_MAX #denna zaloha else echo "HODINOVA ZALOHA" DIR=$DIR3 DIR_MAX=$DIR3_MAX fi fi #kontrola, ci existuje adresar if [ ! -d "$DIR" ]; then mkdir $DIR fi ####################### #prechadzaj jednotlive databazy for DB in $ZALOHUJ_DB; do #vytvor nazov suboru SUBOR=$DB\_`date "+%y%m%d_%H%M"`.sql #kontrola, ci existuje adresar if [ ! -d "$DIR/$DB" ]; then mkdir $DIR/$DB fi #vytvorenie zalohy databazy echo "vytvaram zalohu: $SUBOR" pg_dump -O $DB > $DIR/$DB/$SUBOR #zozipuj zalohu gzip -r $DIR/$DB/* #odstranenie suborov nad pozadovany pocet zaloch vymaz_subor $DIR/$DB $DIR_MAX done echo "KONIEC" date