.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)
--- /dev/null
+### backupninja PostgreSQL config file ###
+
+# backupdir = <dir> (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 = <vserver> (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.
+
--- /dev/null
+#
+# 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
+