Ziel ist es, einmal pro Nacht alle VHosts mit Datenbanken zu sichern und 7 Tage vorzuhalten. Parallel dazu möchten wir 2x Pro Woche das Komplette System sichern, und jeweils 2 Generationen davon aufbewahren. Das komplette Backup lagern wir auf einem FTP Server aus. Achtet auf jeden Fall darauf, genügend Speicherplatz zu haben. Ansonsten könnt Ihr die Zahl der Backups verringern. Ich mache nur Fullbackups, inkrementelle kommen bei mir nicht in Frage. Wer das möchte, kann sich dass aber gerne Parametrisieren.
Ein
man backup2l
hilft hier nach der installation weiter.
Durch das Systembackup fällt der der Server 2x die Woche früh morgens für ca. 15 Minuten aus. Wer das nicht verkraften kann, sollte die enstprechenden Dienste nicht beenden. Da wir allerdings auch Datenbanken als Files mitnehmen, wäre das beenden empfehlenswert!
Ich gehe hier von einem opensuse 10.1 mit Plesk 8.2.0 aus. Ausserdem gehe ich davon aus, dass entsprechend ein FTP Backup Server vorhanden ist.
Fangen wir an:
Zuerst legen wir das lokale Backupverzeichniss an. Am besten da, wo noch genügend Platz vorhanden ist:
Runterladen der benötigten Software:
Code:
mkdir /srv/software/
CD /srv/software/
Code:
wget http://dfn.dl.sourceforge.net/sourceforge/backup2l/backup2l_1.4.tar.gz
wget http://www.lyra.org/sitecopy/sitecopy-0.16.3.tar.gz
Entpacken:
Code:
tar xzf backup2l_1.4.tar.gz
tar xzf sitecopy-0.16.3.tar.gz
Installieren von backup2l:
Code:
CD /srv/software/backup2l-1.4/
./install-sh
Die beiden Fragen können mit „y“ beantwortet werden.
Entfernen des täglichen Cronjobs (später mehr dazu)
Code:
rm /etc/cron.daily/zz-backup2l
Wir beginnen nun mit der Einrichtung von backup2:
Code:
mv /etc/backup2l.conf /etc/backup2l-vhost.conf
Bearbeiten der VHost Config:
Code:
vi /etc/backup2l-vhost.conf
Finde:
Ersetze durch
Finde:
Code:
SRCLIST=(/etc /root /home /var/mail /usr/local)
Ersetze durch (Deinen VHost Pfad!)
Code:
SRCLIST=(/srv/www/vhosts)
Finde
Code:
BACKUP_DIR=“/disk2/backup/“
Ersetze durch
Code:
BACKUP_DIR=“/srv/backup/sync“
Setze folgende Werte:
Code:
MAX_LEVEL=0
MAX_PER_LEVEL=0
MAX_FULL=7
Finde:
Ersetze durch:
Nun konfigurieren wir das Systembackup:
Code:
CP /etc/backup2l-vhost.conf /etc/backup2l-system.conf
vi /etc/backup2l-system.conf
Code:
VOLNAME="system"
SRCLIST=(/)
SKIPCOND=(-path '/proc' -o -path '/proc/*' -o -path '/srv/backup/*' -o -path '/srv/backup' -o -path '/srv/www/*' -o -path '/srv/www' -o -path '/sys' -o -path '/sys/*')
MAX_LEVEL=0
MAX_PER_LEVEL=0
MAX_FULL=2
GENERATIONS=1
Vor dem Backup:
Code:
PRE_BACKUP ()
{
echo "pre-backup: Dienste beenden"
echo "Apache"
rcapache2 stop
echo "MySQL"
rcmysql stop
echo "Nameserver"
rcnamed stop
echo "Mailserver"
/etc/init.d/qmail stop
echo "Plesk"
/etc/init.d/psa stop
echo "Mailman"
rcmailman stop
}
Nach dem Backup:
Code:
POST_BACKUP ()
{
echo " post-backup: Dienste starten"
echo "Plesk"
/etc/init.d/psa start
echo "Mailserver"
/etc/init.d/qmail start
}
Kommen wir zu den Datenbanken, die wir einzeln in Files dumpen und eine gewisse Zeit auf dem Server und dem FTP Backup Server vorhalten möchten:
Code:
touch /usr/local/bin/dbsave
chmod 700 /usr/local/bin/dbsave
vi /usr/local/bin/dbsave
Inhalt der Datei: (Fragmente aus einem alten fund im Internet, Danke dem Author!)
Code:
#!/bin/bash
echo "Alle MySQL-Datenbanken sichern:"
mysqlshow -uadmin -pGEHEIM | awk '{print $2}' | grep -v Databases | sort >/tmp/dblist.txt
CD /srv/backup/sync/
mkdir -p `date +%Y%m%W%D`
CD `date +%Y%m%W%D`
for x in `cat /tmp/dblist.txt`; do
echo "Datenbank: $x sichern";
mysqldump --opt -uadmin -pGEHEIM $x >$x.sql;
done;
echo "Alte .gz-Dateien loeschen:"
rm *.gz
echo "Dateien zippen:"
gzip *
echo .fertig.
echo "=================================================="
Nach Ablauf liegen nun die Datenbanken in
Code:
/srv/backup/sync/DATUM….
vor und werden später mit Sitecopy auf den server kopiert. Pro Tag gibt es einen Unterordner.
Damit dieser Ordner nicht voll läuft, kümmern wir uns um die regelmäßige Verschiebung:
Code:
mkdir /srv/backup/db_old
touch /usr/local/bin/dbpush
chmod 700 /usr/local/bin/dbpush
vi /usr/local/bin/dbpush
Inhalt der Datei:
Code:
#!/bin/bash
echo "Alle MySQL-Datenbanken verschieben:"
rm -fr /srv/backup/db_old/*
mv -v /srv/backup/sync/2* /srv/backup/db_old/
Um volle Kontrolle zu behalten legen wir für jeden Sicherungsablauf ein eigenes Starterskript an. Beginnen wir mit den VHost-Sicherungen:
Code:
touch /usr/local/bin/webbackup
chmod 700 /usr/local/bin/webbackup
vi /usr/local/bin/webbackup
Inhalt der Datei:
Code:
#!/bin/bash
echo "Sicherung aller VHosts anlegen"
echo "=================================================="
/usr/local/bin/backup2l -c /etc/backup2l-vhost.conf –b
Nun das Systembackup:
Code:
touch /usr/local/bin/sysbackup
chmod 700 /usr/local/bin/sysbackup
vi /usr/local/bin/sysbackup
Inhalt dieser Datei:
Code:
#!/bin/bash
echo "Sicherung des Systems anlegen"
echo "=================================================="
/usr/local/bin/backup2l -c /etc/backup2l-system.conf -b
Ok, nachdem wir uns um die Sicherung gekümmert haben, installieren wir sitecopy:
Installieren von sitecopy:
Code:
CD /srv/software/sitecopy-0.16.3/
./configure
make
make install
Anlegen des configfile/folder:
Code:
mkdir -m 700 /root/.sitecopy
touch /root/.sitecopyrc
chmod 600 /root/.sitecopyrc
vi /root/.sitecopyrc
Inhalt der Datei:
Code:
site backup
server backupxxx.onlinehome-server.info
remote /backup
local /srv/backup/sync
username bakxxxxxx
password geheim
Ordner auf dem Backupserver anlegen:
Code:
ftp bakxxxxxx@backupxxx.onlinehome-server.info
mkdir backup
quit
Und Sitecopy initialisieren:
Code:
/usr/local/bin/sitecopy --init backup
Da wir vorhaben, täglich als letzten Vorgang die Datenbanken zu sichern, nehmen wir die Syncronisation da mit rein. Da ich jeden Tag mir den Status per Email zukommen lassen möchte, habe ich in dieser Mail den Überblick ob die Datenbanken gesichert sind, und ob das Syncronisieren geklappt hat:
Code:
vi /usr/local/bin/dbsave
und fügen am Ende
Code:
echo "Sync starten:"
/usr/local/bin/sitecopy -u backup
echo "Sync beendet"
hinzu.
Nun kümmern wir uns darum, dass alle Programme ablaufen, Infos in Logfiles schreiben und uns das per mail schicken:
Alle Programme Ausführen, Logs schreiben
Code:
00 01 * * * /usr/local/bin/webbackup > /tmp/webbackup.log
30 03 * * 1,4 /usr/local/bin/sysbackup > /tmp/sysbackup.log
00 04 * * * /usr/local/bin/dbsave > /tmp/dbsave.log
45 03 * * 1 /usr/local/bin/dbpush > /tmp/dbpush.log
Logs per mail schicken lassen
Code:
00 06 * * * mail -s "VHost Sicherung" -a /tmp/webbackup.log mail@adresse.de
00 06 * * 1,4 mail -s "System Sicherung" -a /tmp/sysbackup.log mail@adresse.de
00 06 * * * mail -s "DB Sicherung + Sync" -a /tmp/dbsave.log mail@adresse.de
00 06 * * 1 mail -s "DB Archivierung" -a /tmp/dbpush.log mail@