ISPConfig – Backup pro Client und kleiner 2


Wer die Emails auf einem Server in ein komplettes Archiv sichert und dann nur eine einzelne Mailbox oder gar nur ein paar Mails wieder herstellen will, freut sich, wenn das Archiv ein paar GB hat.

Gleiches gilt natürlich auf für Webdomains oder Datenbank (hier ist ein globaler Dump schon fast ein Desaster).

Mein Backup-Script schreibt zwar eine Menge Archive, das macht aber weder von der Laufzeit noch vom benötigten Speicherplatz her einen elementaren Unterschied. Das Restore geht dafür – und darauf kommt es überwiegend an – sehr viel schneller. Ich muss nämlich nicht erst ein Riesenarchiv entpacken und durchsuchen, sondern nehme die kleineren Archive aus dem Backupspace.

Gesichert werden

  1. Datenbanken jedes Clients
  2. alle Postfächer einzeln
  3. alle Websites einzeln

Daraus resultieren verschiedene Archive, z.B.:

3-Mustermann-db_test.sql.gz.gpg

3-mails-mustermann.de-erwin@mustermann.de.tar.gz.gpg

3-mustermann.de.tar.gz.gpg
Die führende 3 ist die Backup-Nummer. Ich habe immer 5 Backups greifbar, die automatisch überschrieben werden.
#!/bin/bash
# Tageszahl (fuer 6 Backups)
DOW1=`date +%j`
DOW=`expr $DOW1 % 5`
# Datenbanken
DBISPconfig="dbispconfig"
# Binaries
SQLDUMP="/usr/bin/mysqldump"
SQLBIN="/usr/bin/mysql"
GPG="/usr/bin/gpg"
# tar-Options
BACKUP_TAR_OPT_NOZIP="-ch"
# gpg-Options
GPG_OPTIONS="gpg -e -r 8F1D5389"
# Level
LEVEL=`date +%u` # day of week (1..7); 1 is Monday
(( LEVEL-- )) # Mon full-Backup, Sun level 6
BACKUP_NO=$LEVEL

# User DB
$SQLBIN $DBISPconfig -e "select database_name from web_database
order by database_id asc;" | grep -v 'database_name' |
while read DBNAME
do
  $SQLBIN $DBISPconfig -e "SELECT
CONCAT(c.username,'_',w.database_name) AS FILENAME FROM client c,
web_database w WHERE w.sys_groupid = c.client_id+1 AND
w.database_name = '$DBNAME';" | grep -v 'FILENAME' |
  while read FILENAME
  do
    $SQLDUMP $DBNAME | $GPG_OPTIONS > $BPATH/$DOW-$FILENAME.sql.gpg
    ncftpput ${BACKUP_FTP_OPT} ./user/databases $BPATH/$DOW-$FILENAME.sql.gpg
  done
done

# Client maildomains
$SQLBIN $DBISPconfig -e "SELECT domain AS MAILDOMAIN FROM mail_domain WHERE active='y' order by domain asc;" |
grep -v 'MAILDOMAIN' | while read MAILDOMAIN
  do
    $SQLBIN $DBISPconfig -e "SELECT email AS EMAIL, maildir AS MAILDIR FROM mail_user WHERE email LIKE '%$MAILDOMAIN';" |
    grep -v 'MAILDIR' |while read t
    do
      email=`echo $t|cut -d" " -f1`
      maildir=`echo $t|cut -d" " -f2`
      tar cfz - $maildir | $GPG_OPTIONS > $BPATH/$DOW-mails-$MAILDOMAIN-$email.tar.gz.gpg
      ncftpput ${BACKUP_FTP_OPT} ./user/maildomains/$MAILDOMAIN $BPATH/$DOW-mails-$MAILDOMAIN-$email.tar.gz.gpg
    done
  done

# Client websites
$SQLBIN $DBISPconfig -e "SELECT domain AS WEBSITE FROM web_domain WHERE active='y' AND type='vhost';" |
grep -v 'WEBSITE'
while read WEBSITE
do
  tar czf $BPATH/$DOW-website-$WEBSITE.tar.gz $WWW/$WEBSITE/*
  ncftpput ${BACKUP_FTP_OPT} ./user/webdomains $BPATH/$DOW-website-$WEBSITE.tar.gz
done

Jedes Archiv wird im Hintergrund durch ncftp in den Backupspace verschoben.


Kommentar erstellen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

2 Gedanken zu “ISPConfig – Backup pro Client und kleiner

  • Mirco

    Hallo,
    vielen Dank für die interessante Anleitung.
    Wie genau läuft das mit dem .gpg, was muss man da beachten und wie richtet man das ein?

    LG, Mirco

    • Florian Schaal Beitragsautor

      Du kannst GPG auch weglassen. Ansonsten: The GNU Privacy Handbook

      ISPConfig kann aber mittlerweile Backups für Web und Datenbanken anlegen. Eine Backupfunktion für Emails habe ich in das devel-git integriert. Wenn ich etwas Zeit habe, wird es dazu noch einen Backport für die aktuelle Version 3.0.5.4 geben.