mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-11-08 20:02:32 +01:00
aeca6912a8
... so that this option can be disabled on systems that don't support it. This also allows to use another compression program, such as pbzip2 on SMP machines (closes Roundup bug #2405).
135 lines
4.5 KiB
Bash
135 lines
4.5 KiB
Bash
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
|
|
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
|
|
#
|
|
# PostgreSQL handler script for backupninja
|
|
#
|
|
|
|
getconf backupdir /var/backups/postgres
|
|
getconf databases all
|
|
getconf compress yes
|
|
getconf vsname
|
|
|
|
localhost=`hostname`
|
|
|
|
# Decide if the handler should operate on a vserver or on the host.
|
|
# In the former case, check that $vsname exists and is running.
|
|
local usevserver=no
|
|
local vroot
|
|
if [ $vservers_are_available = yes ]; then
|
|
if [ -n "$vsname" ]; then
|
|
# does it exist ?
|
|
if ! vservers_exist "$vsname" ; then
|
|
fatal "The vserver given in vsname ($vsname) does not exist."
|
|
fi
|
|
# is it running ?
|
|
vservers_running $vsname || fatal "The vserver $vsname is not running."
|
|
# everything ok
|
|
info "Using vserver '$vsname'."
|
|
usevserver=yes
|
|
vroot="$VROOTDIR/$vsname"
|
|
else
|
|
info "No vserver name specified, actions will be performed on the host."
|
|
fi
|
|
fi
|
|
|
|
# Make sure that the system to backup has the needed executables
|
|
if [ $usevserver = yes ]; then
|
|
debug "Examining vserver '$vsname'."
|
|
if [ "$databases" == "all" ]; then
|
|
[ -x "$vroot`$VSERVER $vsname exec which $PGSQLDUMPALL`" ] || \
|
|
fatal "Can't find $PGSQLDUMPALL in vserver $vsname."
|
|
else
|
|
[ -x "$vroot`$VSERVER $vsname exec which $PGSQLDUMP`" ] || \
|
|
fatal "Can't find $PGSQLDUMP in vserver $vsname."
|
|
fi
|
|
else
|
|
if [ "$databases" == "all" ]; then
|
|
[ -x "`which $PGSQLDUMPALL`" ] || \
|
|
fatal "Can't find $PGSQLDUMPALL."
|
|
else
|
|
[ -x "`which $PGSQLDUMP`" ] || \
|
|
fatal "Can't find $PGSQLDUMP."
|
|
fi
|
|
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 ] || (debug "mkdir -p $vroot$backupdir"; mkdir -p $vroot$backupdir)
|
|
[ -d $vroot$backupdir ] || fatal "Backup directory '$vroot$backupdir' does not exist, and could not be created."
|
|
|
|
# give backup dir the good uid and permissions
|
|
# (in respect to the vserver, if $usevserver = yes)
|
|
if [ $usevserver = yes ]; then
|
|
pguid=`$VSERVER $vsname exec getent passwd $PGSQLUSER | @AWK@ -F: '{print $3}'`
|
|
else
|
|
pguid=`getent passwd $PGSQLUSER | @AWK@ -F: '{print $3}'`
|
|
fi
|
|
[ -n "$pguid" ] || \
|
|
fatal "No user called $PGSQLUSER`[ $usevserver = no ] || echo \" on vserver $vsname\"`."
|
|
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 = yes ]; then
|
|
if [ "$compress" == "yes" ]; then
|
|
execstr="$VSERVER $vsname exec su - $PGSQLUSER -c \"set -o pipefail ; $PGSQLDUMPALL | $GZIP $GZIP_OPTS > '$backupdir/${vsname}.sql.gz'\""
|
|
else
|
|
execstr="$VSERVER $vsname exec su - $PGSQLUSER -c \"$PGSQLDUMPALL > '$backupdir/${vsname}.sql'\""
|
|
fi
|
|
else
|
|
if [ "$compress" == "yes" ]; then
|
|
execstr="su - $PGSQLUSER -c \"set -o pipefail ; $PGSQLDUMPALL | $GZIP $GZIP_OPTS > '$backupdir/${localhost}-all.sql.gz'\""
|
|
else
|
|
execstr="su - $PGSQLUSER -c \"$PGSQLDUMPALL > '$backupdir/${localhost}-all.sql'\""
|
|
fi
|
|
fi
|
|
debug "$execstr"
|
|
if [ ! $test ]; then
|
|
output=`eval $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 = yes ]; then
|
|
if [ "$compress" == "yes" ]; then
|
|
execstr="$VSERVER $vsname exec su - $PGSQLUSER -c \"set -o pipefail ; $PGSQLDUMP $db | $GZIP $GZIP_OPTS > '$backupdir/${db}.sql.gz'\""
|
|
else
|
|
execstr="$VSERVER $vsname exec su - $PGSQLUSER -c \"$PGSQLDUMP $db | > '$backupdir/${db}.sql'\""
|
|
fi
|
|
else
|
|
if [ "$compress" == "yes" ]; then
|
|
execstr="su - $PGSQLUSER -c \"set -o pipefail ; $PGSQLDUMP $db | $GZIP $GZIP_OPTS > '$backupdir/${db}.sql.gz'\""
|
|
else
|
|
execstr="su - $PGSQLUSER -c \"$PGSQLDUMP $db > '$backupdir/${db}.sql'\""
|
|
fi
|
|
fi
|
|
debug "$execstr"
|
|
if [ ! $test ]; then
|
|
output=`eval $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
|
|
|
|
return 0
|
|
|