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
- Datenbanken jedes Clients
- alle Postfächer einzeln
- 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.
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
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.