#!/bin/bash
# Kategorie: server
# Shellscript zum Sichern aller Datenbanken eines invis Servers.
# (C) 2009 invis-server.org
# Author: Stefan Schaefer / stefan@invis-server.org

# License: GPLv3
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 

# Konfigurationsdaten
conffile="/etc/invis/invis.conf"
passfile="/etc/invis/invis-pws.conf"

LANG=POSIX

# Funktionen
# Werte aus Konfigurationsdatendatei extrahieren
# $1 = Konfigurationsdatei, $2 = Parameter, $3 Wert (Feld)
getconfdata() {
    cat $1 |grep "$2" | cut -d ":" -f $3
}

# Konfigurationsparameter tauschen
changevalues() {
    # Arg1 = Pfad, Arg2 = Datei, Arg3 = sed String
    cat $1/$2|sed "s%$3%g" > $1/$2.new
    mv $1/$2.new $1/$2
}

## Name der Zarafadb
zarafadb=`getconfdata $conffile "zDatabase" "2"`

## Sicherungsverzeichnis

dasibase=`getconfdata $conffile "DasiDir" "2"`
dasitarget=`getconfdata $conffile "DBTarget" "2"`
dasidir="$dasibase/vollsicherungen/$dasitarget"

dumpdir="$dasibase/dbdumps"

# Erstellen, wenn nicht vorhanden
if [[ ! -d $dumpdir ]]; then
    mkdir -p $dumpdir
    chmod 0777 $dumpdir
fi

if [[ ! -d $dasidir ]]; then
    mkdir -p $dasidir
fi

datum=`date +%Y%m%d`

## MySQL
mystatus=`systemctl is-enabled mysql.service`
if [[ $mystatus == "enabled" ]]; then
    # root PW einlesen
    mysqlrootpw=`getconfdata $passfile "MySQLroot" "2"`
    loginstring="-u root --password=$mysqlrootpw"

    # Alle Datenbanken ermitteln und sichern
    alldbs=(`mysqlshow  $loginstring |tr -s " "| cut -d " " -f2| grep -v "+"|grep -v "Databases"`)
    for db in ${alldbs[*]}; do
	# Zarafa-DB ausschließen
	if [[ $db != "$zarafadb" ]]; then
	    mysqldump $loginstring --add-drop-table --single-transaction $db > $dumpdir/mysql-$db-sicherung.sql
	fi
    done
fi

## PostgreSQL
pgstatus=`systemctl is-enabled postgresql.service`
if [[ $pgstatus == "enabled" ]]; then
    # ins Home-Verzeichnis von User postgres wechseln
    cd /var/lib/pgsql
    alldbs=(`sudo -u postgres psql -l|tr -d " "|grep -v "Name"|grep -v "Listof" |grep -v '^--' |grep -v "("|cut -d "|" -f1`)

    for db in ${alldbs[*]}; do
	sudo -u postgres pg_dump -C --inserts -b $db > $dumpdir/pgsql-$db-sicherung.sql 2>/dev/null
    done
    cd
fi

## Sicherungen archivieren
find $dumpdir/*| afio -oZ $dasidir/$datum-alle-datenbanken.cpio

## Dump-Verzeichnis leeren
rm -rf $dumpdir/*
