PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [HOW-TO] Sicherung eines Servers mit backup2l und


Bluesteel
10.12.2008, 02:03
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:

mkdir /srv/backup
mkdir /srv/backup/sync Runterladen der benötigten Software:

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:

tar xzf backup2l_1.4.tar.gz
tar xzf sitecopy-0.16.3.tar.gz
Installieren von backup2l:
cd /srv/software/backup2l-1.4/
./install-shDie beiden Fragen können mit „y“ beantwortet werden.


Entfernen des täglichen Cronjobs (später mehr dazu)

rm /etc/cron.daily/zz-backup2lWir beginnen nun mit der Einrichtung von backup2:

mv /etc/backup2l.conf /etc/backup2l-vhost.confBearbeiten der VHost Config:

vi /etc/backup2l-vhost.confFinde:

VOLNAME=“all“
Ersetze durch

VOLNAME=“vhost“Finde:

SRCLIST=(/etc /root /home /var/mail /usr/local)
Ersetze durch (Deinen VHost Pfad!)

SRCLIST=(/srv/www/vhosts)Finde

BACKUP_DIR=“/disk2/backup/“Ersetze durch

BACKUP_DIR=“/srv/backup/sync“Setze folgende Werte:

MAX_LEVEL=0
MAX_PER_LEVEL=0
MAX_FULL=7Finde:

UNCONFIGURED=1
Ersetze durch:

# UNCONFIGURED=1Nun konfigurieren wir das Systembackup:

cp /etc/backup2l-vhost.conf /etc/backup2l-system.conf
vi /etc/backup2l-system.conf
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=1Vor dem Backup:

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:

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:


touch /usr/local/bin/dbsave
chmod 700 /usr/local/bin/dbsave
vi /usr/local/bin/dbsaveInhalt der Datei: (Fragmente aus einem alten fund im Internet, Danke dem Author!)

#!/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
/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:


mkdir /srv/backup/db_old
touch /usr/local/bin/dbpush
chmod 700 /usr/local/bin/dbpush
vi /usr/local/bin/dbpushInhalt der Datei:

#!/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:


touch /usr/local/bin/webbackup
chmod 700 /usr/local/bin/webbackup
vi /usr/local/bin/webbackup
Inhalt der Datei:

#!/bin/bash
echo "Sicherung aller VHosts anlegen"
echo "=================================================="
/usr/local/bin/backup2l -c /etc/backup2l-vhost.conf –b
Nun das Systembackup:

touch /usr/local/bin/sysbackup
chmod 700 /usr/local/bin/sysbackup
vi /usr/local/bin/sysbackupInhalt dieser Datei:

#!/bin/bash
echo "Sicherung des Systems anlegen"
echo "=================================================="
/usr/local/bin/backup2l -c /etc/backup2l-system.conf -bOk, nachdem wir uns um die Sicherung gekümmert haben, installieren wir sitecopy:

Installieren von sitecopy:

cd /srv/software/sitecopy-0.16.3/
./configure
make
make install
Anlegen des configfile/folder:

mkdir -m 700 /root/.sitecopy
touch /root/.sitecopyrc
chmod 600 /root/.sitecopyrc
vi /root/.sitecopyrcInhalt der Datei:

site backup
server backupxxx.onlinehome-server.info
remote /backup
local /srv/backup/sync
username bakxxxxxx
password geheimOrdner auf dem Backupserver anlegen:


ftp bakxxxxxx@backupxxx.onlinehome-server.info
mkdir backup
quitUnd Sitecopy initialisieren:

/usr/local/bin/sitecopy --init backupDa 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:



vi /usr/local/bin/dbsaveund fügen am Ende

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:

crontab -eAlle Programme Ausführen, Logs schreiben

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

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@