[HOW-TO] Sicherung eines Servers mit backup2l und sitecopy in mehreren Stufen

BlackPixel

New Member
ich schreib immer wieder davon, hier nun das HOW-TO, mit dem ich mich bei den Betreibern für die Plattform bedanken möchte.

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
Code:
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:
Code:
mkdir /srv/backup
mkdir /srv/backup/sync

Runterladen der benötigten Software:
Code:
mkdir /srv/software/
cd /srv/software/
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:
Code:
VOLNAME=“all“

Ersetze durch

Code:
VOLNAME=“vhost“


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:
Code:
UNCONFIGURED=1

Ersetze durch:

Code:
# UNCONFIGURED=1



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:

Code:
crontab -e

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@adresse.de


Gruß Manfred
 
Hi,
vielen dank für deine anleitung teste das gerade.
Aber mal nen Tipp das versenden der logs finde ich so unelegant.
es wäre besser das mit dem ersten befehl mit nem ; zu verknüpfen um sicher zu gehen das das erst gemacht wird wenn der backupprozess fertig ist.
Lasse das gerade durchlaufen und berichte dann nochmal :D
 
Code:
mail -s "DB Archivierung" -a /tmp/dbpush.log mail@adresse.de

das lief bei mir auch nciht unter debian habe das so gelöst
Code:
cat /tmp/dbpush.log | mail -s "DB Archivierung"  mail@adresse.de
 
Moin,

ich wollte mich bedanken für dieses Tutorial.

Nun funktioniert dank sitecopy mein Backup2l auch mehr als nur auf einen USB Stick :-)

Für die Debianer kann man übrigens auch apt-get install backup2l sitecopy nehmen.

Dann sind die Dateien mit sitecopy oder backup2l direkt aufrufbar!
 
Back
Top