#!/bin/bash BACKUP_BASE_DIR="/backup/psql" mkdir -p $BACKUP_BASE_DIR PSQL_BIN_DIR=/usr/local/pgsql/bin days=30 PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11 # -- erstelle liste der datenbanken # -- listfile=${BACKUP_BASE_DIR}/dblist-`date +"%Y%m%d-%H%M"`.txt echo -e "Stand: `date +\"%d.%m.%Y %H:%Mh\"`\n" > $listfile su postgres -c"${PSQL_BIN_DIR}/psql -l" >> $listfile # -- erstelle dump zum wiederherstellen der # -- user und datenbanken. # -- dbusers_databases_file=${BACKUP_BASE_DIR}/db_users_databases-`date +"%Y%m%d-%H%M"`.sql cat< $dbusers_databases_file -- -- restore user and databasedefinitions (no data) for db-cluster -- su postgres -c"psql -f $dbusers_databases_file template1" -- EOF su postgres -c"${PSQL_BIN_DIR}/pg_dumpall -g" >> $dbusers_databases_file cat<> $dbusers_databases_file -- -- Database creation -- EOF su postgres -c"${PSQL_BIN_DIR}/pg_dumpall -s" | grep "CREATE DATABASE" >> $dbusers_databases_file # -- # -- Wiederherstellung der user und datenbanken (nur definitionen - keine daten ) # -- su postgres -c"psql -f $dbusers_databases_file template1" databases=`su postgres -c"${PSQL_BIN_DIR}/psql -l -t" | grep -v -e"^$" | awk '{print$1}'` # -- erstelle dump dateien fer jede einzelne datenbank # -- for db in $databases ; do BACKUP_DIR=${BACKUP_BASE_DIR}/$db mkdir -p $BACKUP_DIR cat< ${BACKUP_DIR}/dump_${db}-${DATE}.sql -- -- restore data for databas $db: -- su postgres -c"psql -f ${BACKUP_DIR}/dump_${db}-${DATE}.sql ${db}" -- EOF DATE=`date +"%Y%m%d-%H%M"` su postgres -c"${PSQL_BIN_DIR}/pg_dump -c $db" >> ${BACKUP_DIR}/dump_${db}-${DATE}.sql done # delete all older than $days days # /usr/bin/find $BACKUP_DIR -type f -mtime +${days} -exec /bin/rm {} \; exit 0