#!/bin/bash ####################################################################### # PG_BACKUP.SHL # # Created : Martin Foster # Modified : 24-Nov-2004 ####################################################################### # # Due to limitations with the PostgreSQL database backup tool not # accepting passwords on the command prompt to automate the process and # thus requiring a loose set of security. This script instead calls # the backup proceedure locally on the server and through SSH/RSH sends # the results back over the network to the appropriate workstation. # # Advantages to this system when making use of SSH is the encryption # and certificate based authentication allowing for security while # ease of use. This also runs the backup on the database server # allowing for a copy to be generated simultaneously if so desired. ################# # Data Members # # Site specific configuration BACKUP='/var/archives/postgres' # Backup path DB='ethereal' # Databases to backup CREDENTIALS='martin@io' # Username/host combination # # Date based hiearchy DAY=`date +%d` MONTH=`date +%m` YEAR=`date +%y` # # Location of utilities ARCHIVER="/usr/bin/bzip2" # Archive to compress stream DUMP="/usr/local/bin/pg_dump -cDU postgres" # Database dumping utility FILTER="/usr/bin/grep -v 'INSERT INTO param'" # Filter used with dump REMOTE="/usr/bin/ssh" # Remote access capability # # File settings PERM='0644' # Permissions to take on OWNER='root' # Owner of file GROUP='wheel' # Owner group EXT='.bz2' # Extension to use # # Verbosity VERBOSE='NO' # Display information to screen ################# # Program area # Explain what happens if [ "$VERBOSE" = "YES" ] then # Go change into the log dir if [ -d $BACKUP ] then # see if month dir exists in log dir - if not create one if [ ! -d "$BACKUP/$YEAR$MONTH" ] then # date dir does not exist in the log dir - create one /bin/mkdir "$BACKUP/$YEAR$MONTH" 2>&1 >/dev/null if [ $? -ne 0 ] then # could not create log date dir echo -e " Could not create: $BACKUP/$YEAR$MONTH - exiting!\n" exit 1 else # created dir echo -e " Created: $BACKUP/$YEAR$MONTH\n" fi fi # Change working directory cd "$BACKUP/$YEAR$MONTH" # Cycle through list for SINGLE in $DB do echo -e " Initiating backup of database: $SINGLE" $REMOTE $CREDENTIALS "$DUMP $SINGLE | $FILTER | $ARCHIVER" > $SINGLE-$MONTH$DAY$EXT echo -e " Setting permissions..." chmod $PERM $SINGLE-$MONTH$DAY$EXT echo -e " Setting permissions..." chown $OWNER $SINGLE-$MONTH$DAY$EXT echo -e " Setting permissions..." chgrp $GROUP $SINGLE-$MONTH$DAY$EXT # Verify file exists if [ -f "$SINGLE-$MONTH$DAY.bz2" ] then echo -e " Backup succesful!" else echo -e " Backup failed!" fi done else # Warning echo -e " Working directory not found: $BACKUP\n" fi # Lack of detail else # Go change into the log dir if [ -d $BACKUP ] then # see if month dir exists in log dir - if not create one if [ ! -d "$BACKUP/$YEAR$MONTH" ] then # date dir does not exist in the log dir - create one /bin/mkdir "$BACKUP/$YEAR$MONTH" 2>&1 >/dev/null if [ $? -ne 0 ] then # could not create log date dir echo -e "Could not create: $BACKUP/$YEAR$MONTH - exiting!\n" exit 1 fi fi # Change working directory cd "$BACKUP/$YEAR$MONTH" # Cycle through list for SINGLE in $DB do $REMOTE $CREDENTIALS "$DUMP $SINGLE | $FILTER | $ARCHIVER" > $SINGLE-$MONTH$DAY$EXT chmod $PERM $SINGLE-$MONTH$DAY$EXT chown $OWNER $SINGLE-$MONTH$DAY$EXT chgrp $GROUP $SINGLE-$MONTH$DAY$EXT # Verify file exists if [ ! -f "$SINGLE-$MONTH$DAY$EXT" ] then echo -e " Backup of $SINGLE failed!" fi done else # Warning echo -e " Working directory not found: $BACKUP\n" fi fi