Dieser Gastbeitrag befasst sich mit einer Backup Strategie speziell für einen Zarafa Server in der Community Version.

Ein Dank an Tobi, der mich dies über seine Seite schreiben lässt.

 

Da der Zarafa Server in der Community Version keine eigene Backup Funktion hat, muss man etwas improvisieren. Ich erledige das mit einem Backup Script welches jede Nacht als Cronjob gestartet wird.
Da ich meinen Zarafa schon 1,5 Jahre betreibe ist die Datenbank mittlerweile bei > 350 MB angelangt.

Eine Sicherung auf dem heimischen Rechner ist zwar möglich, aber im Fall der Fälle braucht es Stunden bis ich mit meiner DSL Leitung die Sicherung wieder hochgeladen habe.
Darum die Idee mit dem Backup in der Cloud. In meinem Fall einfach in die Dropbox.

Für den der die Dropbox nicht kennt.
Dropbox ist ein Synchronisations Dienst, man kann (muss nicht) mehre Rechner damit verknüpfen und hat so immer den gleichen Datenbestand auf allen Rechnern. Oder aber auch online verfügbar/gesichert.

 

Part 1: tägliche Sicherung der MYSQL Datenbank

ein mysql Dump ist schnell erledigt. Händisch…

mysqldump -u root -p –single-transaction zarafa > /var/backups/zarafa.dump

für Debian Systeme sollte man allerdings noch einige Optionen abschalten.

mysqldump -u root -p –single-transaction –skip-opt –add-drop-table –add-locks –create-options –disable-keys –extended-insert –quick –set-charset zarafa > /var/backups/zarafa.dump

wenn man in der shell diese Zeile eintippt wird man nach dem MYSQL Passwort gefragt. Im eigentlichen Backupscript wird dieses natürlich mit übergeben.

 

Part 2: Dropbox Account erstellen und einrichten

Der Standard Dropbox Account ist kostenlos und bietet 2 GB Platz.
Wenn man sich einen Account über diesen Link (http://db.tt/Kas4ebF ) ;) erstellt, erhält man selber und ich 250 MB mehr Speicher (bis zu 8 GB).

Ich muss sagen es gibt einige Tutorials im Netz wie man die Dropbox mit einem Linux ohne GUI verknüpfen kann, irgendwie sind alle recht ähnlich.
Ich nutze die Vorgegebene Art von Dropbox.

  • 1. Das neuste Image runterladen (ins Homeverzeichnis)

Für X86 Systeme
wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86

Für 64 Bit Systeme
wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86_64

  • 2. das Runtergeladene Archiv extrahieren.

tar -xvzf dropbox.tar.gz

  • 3. Im Ordner /.dropbox-dist

kann jetzt Dropbox gestartet werden

~/.dropbox-dist/dropboxd

in der shell kommt an dieser Stelle eine Zeile mit einer URL die man zum Verknüpfen des Accounts raus kopieren muss.

This client is not linked to any account… Please visit https://www.dropbox.com/cli_link?host_id=7g44a557aa32f285f2da0x67334892c1 to link this machine.

  • 4. Einfach die URL im Browser einfügen und das Passwort des eigenen Dropbox Account eingeben.
  • 5. Danach ist der Dropbox Account verknüpft. Und es entsteht ein Ordner im Homeverzeichnis namens Dropbox. In diesem wird nun synchronisiert.

Was mich etwas stört ist – dropboxd – ist kein wirklicher Dienst, es müsste entweder immer die ssh Verbindung geöffnet bleiben, oder man kann sich ein Init Script erstellen um es wie einen Dienst zu handhaben mit Autostart etc.
ist mir aber alles zu viel Arbeit, daher steht der Aufruf des Programms einfach mit im Backupscript drin, sollte es also abstürzen dann startet es bei jeder Sicherung sowieso neu.
Doppelt starten tut es nicht.
Wenn ich es doch mal per Hand beenden will dann „kill“ ich einfach den Prozess.

Part 3: ab in die Cloud

In der Cloud sind die Daten nicht so sicher wie auf dem eigenen Rechner. Daher nutze ich die Möglichkeit von GnuPG, damit lassen sich Daten verschlüsseln. Die Möglichkeiten sind schier unendlich, mit Zertifikaten etc. der Einfachheit halber nutze ich die symmetrische Verschlüsselung mit einem kryptischen Passwort.

In der shell würde man dies so eingeben,
im Script natürlich auch enthalten.

gpg –symmetric –passphrase “geheimesPa$$w0rd” /var/backups/zarafa.dump

Entschlüsselt wird mit

gpg -–decrypt -–passphrase “geheimesPa$$w0rd” /var/backups/zarafa.dump.gpg /var/backups/zarafa.dump

Wie schon erwähnt, hier noch das Script, sicherlich geht es toller besser und schöner, aber es funktioniert ;) .
Dieses Script muss man nur als z.B.: /var/backups/server-backup.sh abspeichern ausführbar machen und es als Cronjob eintragen
also

crontab -e

 

00 23 * * * /var/backups/server-backup.sh #dieses Skript wird jede Nacht 23 Uhr ausgeführt

 

#!/bin/sh

#Database to backup
databases=”zarafa”

# MySQL dump command,
mysqldumpcmd=/usr/bin/mysqldump

# MySQL Username and password
userpassword=” –user=root –password=mysqlpass”

# MySQL dump options
dumpoptions=” –single-transaction –skip-opt –add-drop-table –add-locks –create-options –disable-keys –extended-insert –quick –set-charset”

#Destination file
backupdirfile=”/var/backups/zarafa-backup/backup-zarafa.dump”

#Destination gpg
gpgdirfile=”/var/backups/zarafa-backup/backup-zarafa.dump.gpg”

#Dropbox Pfad
dropboxdir=”/root/Dropbox/Mail-Backup/”

#Dropbox Pfad + File
dropboxfile=”/root/Dropbox/Mail-Backup/backup-zarafa.dump.gpg”

#gnupg passphrase
gpgpassphrase=”geheimesPa$$w0rd”

#############################################
$mysqldumpcmd $userpassword $dumpoptions  $databases > $backupdirfile

echo Dump complete > /var/backups/zarafa_backup-log.txt

#if gpg file exist
if [ -f $gpgdirfile ]

then
#delete + create
rm -rf $gpgdirfile
gpg –symmetric –passphrase $gpgpassphrase $backupdirfile
echo Backup gpg File >> /var/backups/zarafa_backup-log.txt

else
gpg –symmetric –passphrase $gpgpassphrase $backupdirfile
echo Backup gpg File >> /var/backups/zarafa_backup-log.txt
fi

#if dropboxfile exist
if [ -f $dropboxfile ]

then
rm -rf $dropboxfile
echo $dropboxfile delete
mv $gpgdirfile $dropboxdir
echo gpg file moved to $dropboxdir >> /var/backups/zarafa_backup-log.txt

else

mv $gpgdirfile $dropboxdir
echo gpg file moved to $dropboxdir >> /var/backups/zarafa_backup-log.txt

fi

##send Mail with the Backuplog /var/backups/zarafa_backup-log.txt to Name@Domain.de

echo | echo cat /var/backups/zarafa_backup-log.txt | mail -s “Server_Backup-dropbox” Name@Domain.de

exit

Ich hoffe ich habe bei meinem ersten Blog-Beitrag nichts vergessen. Bitte fragen wenn etwas nicht klar ist, oder Hilfe benötigt wird.

Gruß
David