mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-11-10 04:42:31 +01:00
78884142e7
The modelines added match the emacs lines already present and also set the filetype to sh (just like the emacs lines).
135 lines
4.4 KiB
Bash
135 lines
4.4 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 \"$PGSQLDUMPALL | $GZIP > $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 \"$PGSQLDUMPALL | $GZIP > $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 \"$PGSQLDUMP $db | $GZIP > $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 \"$PGSQLDUMP $db | $GZIP > $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
|
|
|