uvt:linux:pg_dump
PostgreSQL zalohovanie
Vytovaranie pravidelnych zaloch pre postgresql s rozdelenim na:
- tyzdenna zaloha
- denna zaloha
- hodinova zaloha
Pripravene pre spustanie pod uzivatelom postgresql s definovanim vsetkych databaz na servery, ktore je potrebne takto zalohovat.
cron
0 * * * * /var/lib/postgresql/bin/pg_dump.sh > /tmp/pg_dump.sh.log 2>&1
pg_dump.sh
#!/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
uvt/linux/pg_dump.txt · Posledná úprava: od rh641dv
