From 76be55feee8adf89bdfd01c980ee22160443fe7f Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 9 Aug 2005 20:28:52 +0000 Subject: [PATCH] Added pgsql (PostgreSQL) handler, with vservers support. git-svn-id: http://code.autistici.org/svn/backupninja/trunk@158 758a04ac-41e6-0310-8a23-8373a73cc35d --- README | 1 + backupninja | 2 + changelog | 4 ++ etc/backup.d/example.pgsql | 19 ++++++++ handlers/pgsql | 96 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+) create mode 100644 etc/backup.d/example.pgsql create mode 100644 handlers/pgsql diff --git a/README b/README index e3977bc..9e2f2e6 100644 --- a/README +++ b/README @@ -62,6 +62,7 @@ file in /etc/backup.d according to the file's suffix: .dup -- filesystem backup (using duplicity) .mysql -- backup mysql databases .ldap -- backup ldap databases + .pgsql -- backup PostgreSQL databases .sys -- general hardware, partition, and system reports. .svn -- backup subversion repositories .maildir -- incrementally backup maildirs (very specialized) diff --git a/backupninja b/backupninja index 7bd3541..59361b3 100755 --- a/backupninja +++ b/backupninja @@ -438,6 +438,8 @@ getconf RDIFFBACKUP /usr/bin/rdiff-backup getconf MYSQL /usr/bin/mysql getconf MYSQLHOTCOPY /usr/bin/mysqlhotcopy getconf MYSQLDUMP /usr/bin/mysqldump +getconf PGSQLDUMP /usr/bin/pg_dump +getconf PGSQLDUMPALL /usr/bin/pg_dumpall getconf GZIP /bin/gzip getconf RSYNC /usr/bin/rsync getconf vservers no diff --git a/changelog b/changelog index e344db6..198009d 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +version XX -- ... + + added pgsql (PostgreSQL) handler, with vservers support + version 0.7 -- July 26 2005 added ninjahelper: a dialog based wizard for creating backupninja configs. considerably improved and changed the log file output. diff --git a/etc/backup.d/example.pgsql b/etc/backup.d/example.pgsql new file mode 100644 index 0000000..8313bd4 --- /dev/null +++ b/etc/backup.d/example.pgsql @@ -0,0 +1,19 @@ +### backupninja PostgreSQL config file ### + +# backupdir = (default: /var/backups/postgres) +# where to dump the backups +# +# databases = < all | db1 db2 db3 > (default = all) +# which databases to backup. should either be the word 'all' or a +# space separated list of database names. +# Note: when using 'all', pg_dumpall is used instead of pg_dump, which means +# that cluster-wide data (such as users and groups) are saved. +# +# compress = < yes | no > (default = yes) +# if yes, compress the pg_dump output. +# +# vsname = (no default) +# what vserver to operate on, only used if vserver = yes in /etc/backupninja.conf +# if you do not specify a vsname the host will be operated on +# Note: if operating on a vserver, $VROOTDIR will be prepended to backupdir. + diff --git a/handlers/pgsql b/handlers/pgsql new file mode 100644 index 0000000..8d8f0c7 --- /dev/null +++ b/handlers/pgsql @@ -0,0 +1,96 @@ +# +# PostgreSQL handler script for backupninja +# + +getconf backupdir /var/backups/postgres +getconf databases all +getconf compress yes +getconf vsname + +localhost=`hostname` + +# If vservers are configured, decide if the handler should +# use them or if it should just operate on the host + +if [ "$vservers" == "yes" ] + then + if [ ! -z $vsname ] + then + info "Using vserver '$vsname'" + usevserver=1 + else + info "No vserver name specified, actions will be performed on the host" + fi +fi + +# Check to make sure that the specified vserver exists +if [ $usevserver ] + then + vroot="$VROOTDIR/$vsname" + [ -d $vroot ] || fatal "vserver '$vsname' does not exist at '$vroot'" +fi + +# create backup dir, the vroot variable will be empty if no vsname was specified +# and will proceed to operate on the host +[ -d $vroot$backupdir ] || mkdir -p $vroot$backupdir +[ -d $vroot$backupdir ] || fatal "Backup directory '$vroot$backupdir'" + +# give backup dir the good uid and permissions +# (in respect to the vserver, if $usevserver) +pguid=`grep '^postgres:' $vroot/etc/passwd | awk -F: '{print $3}'` +debug "chown $pguid $vroot$backupdir" +chown $pguid $vroot$backupdir +debug "chmod 700 $vroot$backupdir" +chmod 700 $vroot$backupdir + +# if $databases = all, use pg_dumpall +if [ "$databases" == "all" ]; then + if [ $usevserver ]; then + execstr="$VSERVER $vsname exec su - postgres -c $PGSQLDUMPALL > $vroot$backupdir/${vsname}.sql" + else + execstr="su - postgres -c $PGSQLDUMPALL > $backupdir/${localhost}-all.sql" + fi + debug "$execstr" + if [ ! $test ]; then + output=`$execstr 2>&1` + code=$? + if [ "$code" == "0" ]; then + debug $output + info "Successfully finished dump of pgsql cluster" + else + warning $output + warning "Failed to dump pgsql cluster" + fi + fi + +# else use pg_dump on each specified database +else + for db in $databases; do + if [ $usevserver ] + then + execstr="$VSERVER $vsname exec su - postgres -c $PGSQLDUMP $db > $vroot$backupdir/${db}.sql" + else + execstr="su - postgres -c $PGSQLDUMP $db > $backupdir/${db}.sql" + fi + debug "$execstr" + if [ ! $test ]; then + output=`$execstr 2>&1` + code=$? + if [ "$code" == "0" ]; then + debug $output + info "Successfully finished dump of pgsql database ${db}" + else + warning $output + warning "Failed to dump pgsql database ${db}" + fi + fi + done +fi + +if [ "$compress" == "yes" ]; then + output=`$GZIP -f $vroot$backupdir/*.sql 2>&1` + debug $output +fi + +return 0 + -- 2.30.2