Backupscript

USchoknecht

Blog Benutzer
Hallo,

im alten STRATO-Serverhandbuch steht eine Anleitung für ein BackUpScript, das ich für Plesk angepasst habe:

Code:
#! /bin/bash
MYUSER=root
MYPASS=Passwort
FUSER=FTP_User
FPASS=FTP_Passwort
mkdir -p /backup/mysql
WOTAG=`date +%a`
# Verzeichnisse sichern bzw. synchronisieren
rsync -az --delete --delete-after /srv /backup
rsync -az --delete --delete-after /etc /backup
rsync -az --delete --delete-after /var/qmail /backup
rsync -az --delete --delete-after /etc/psa /backup/psa_etc
rsync -az --delete --delete-after /usr/local/psa /backup/psa_local_usr

# mysql-dump erstellen (alle Datenbanken) 
cd /backup/mysql
mysqldump -AaCceQ -u$MYUSER -p$MYPASS -r mysql.dbs

# Dateien packen
cd /backup
tar cjf etc_dirs.$WOTAG.tar.bz2 etc
tar cjf srv_dirs.$WOTAG.tar.bz2 srv 
tar cjf mysqldbs.$WOTAG.tar.bz2 mysql 
tar cjf qmail_dirs.$WOTAG.tar.bz2 qmail
tar cjf psaetc_dirs.$WOTAG.tar.bz2 psa_etc/psa
tar cjf psalocalusr_dirs.$WOTAG.tar.bz2 psa_local_usr/psa

# Übertragen auf Backupserver
ftp -u ftp://$FUSER:$FPASS@backup.serverkompetenz.de *$WOTAG*
Mir gefällt das Script ganz gut, weil ich damit immer automatisch (über ein Crontab) für jeden Tag und eine Woche zurück eine Sicherung habe.
Jetzt bin ich mir aber nicht sicher, ob ich alle Daten, die ich für eine 100%ige Wiederherstellung benötige, dabei habe. Die psa-Verzeichnisse sind auch ganz schön groß, brauche ich das überhaupt alles? Welche psa-Verzeichnisse zu sichern sind, habe ich aus einer STRATO-FAQ. Außerdem stört mich, dass die Sicherungen quasi mehrfach auf der localen Platte vorhanden sind und somit Speicherplatz belegen. Kann man dass ggf. zusammenfassen und quasi in einem Rutsch auf den Backupserver schieben?

REOBack gefällt mir nicht wirklich, da damit (soviel ich gesehen habe) kein mysql-dump angelegt wird, oder?

Ich habe bisher mit Confixx gearbeitet und von Plesk noch nicht wirklich viel Ahnung. Außerdem habe ich von meinem dicken Linuxbuch auch erst 1/3 geschafft ;-).

Übrigens hebt sich dieses Forum mit der grundsätzlichen Meinung, dass auch Greenhorns, zu denen ich mich in Bezug auf Linux noch zähle, Rat und Hilfe verdient haben, wohltuhend von anderen ab.

Also, ich freue mich über jeden guten Hinweis.

Viele Grüße aus Thüringen
Uwe
 
Last edited by a moderator:

NeoXx

Registered User
Hm,
bei meinem manual Backup speicher ich mail, sql, vhosts.
In der SQL Speichert Plesk die Kunden und Settings soweit ich das überblicken konnte.
BIs jetzt hat mir nie was gefehlt!

Mfg
Daniel
 

USchoknecht

Blog Benutzer
Backup automatisch

Hallo,

ich möchte gern ein Backup haben, das automatisch läuft. Händisch kann ja jeder so viele Backups machen, wie er will. Wenn die über Plesk gezogen werden, können sie wohl auch wieder eingespielt werden.

Mich würde vor allem interessieren, ob ich mit dem Script alle relevanten Daten habe wäre dankbar, wenn da ma jemand, der sich schon länger mit Plesk beschäftigt, drüberschauen und ggf. einen Hinweis geben kann.

Viele Grüße
Uwe
 
Last edited by a moderator:

dynatakt

New Member
Hallo,

ich habe vor kurzem ein Backup mit diesem Script ausgeführt. Allerdings habe ich jetzt eine 77MB grosse Datenbankdatei mit dem namen mysql.dbs ...

... oki mittlerweile hab ich kapiert das da der eigentlich Datenbankname reingehört hätte. Nun gut, ich hab die datei umbenannt von mysql.dbs zu mysql.sql und sie mir local mit einem Texteditor angesehen. Es sind alle Datenbanken vorhanden. Ca. 60 einzelne Datenbanken, nur eben jetzt als eine Datei. Die Frage ist wie ich die wieder auf dem Server eingespielt bekomme? Debian3.1 mit Plesk8.3

Danke schonmal
 

chris085

Registered User
Code:
#!/bin/bash
 
#Variablen fuer Script setzen
#Startzeit des Script-Durchlaufs
STARTZEIT=`date`

DATE=`date +%a`
MYUSER=admin
MYPASS=pass
BACKUPdatei=/root/log/backup.log
ERRdatei=/root/log/backup_err.log

# Verzeichnisstruktur unter / erstellen
mkdir -p /home/backup/mysql 1>$BACKUPdatei 2>$ERRdatei

# Dateien blockweise kopieren
rsync -vaz --delete --delete-after /etc /home/backup 1>>$BACKUPdatei 2>>$ERRdatei
rsync -vaz --delete --delete-after /srv /home/backup 1>>$BACKUPdatei 2>>$ERRdatei
rsync -vaz --delete --delete-after /var/log /home/backup 1>>$BACKUPdatei 2>>$ERRdatei
rsync -vaz --delete --delete-after /var/qmail /home/backup 1>>$BACKUPdatei 2>>$ERRdatei
rsync -vaz --delete --delete-after /home/ts  /home/backup 1>>$BACKUPdatei 2>>$ERRdatei
rsync -vaz --delete --delete-after /root  /home/backup 1>>$BACKUPdatei 2>>$ERRdatei


# Pause 2 Sek
sleep 2

# Ordner wechseln
cd /home/backup/mysql

# ALLE Datenbanken sichern
mysqldump -AaCceQ -u$MYUSER -p$MYPASS -r mysql.dbs 1>>$BACKUPdatei 2>>$ERRdatei

# Pause 2 Sek
sleep 2

# Zum uebergeordneten Ordner wechseln
cd /home/backup

# Ueberpruefung eventuell vorhandener GunZip-Dateien
gz=`find /home/backup -maxdepth 1 -iname "*.gz"`

if [ -n "$gz" ]
    then
        echo "gz-Dateien vorhanden" 1>>$BACKUPdatei 
        echo "gz-Dateien werden nun verworfen" 1>>$BACKUPdatei
        rm -f /home/backup/*.gz 1>>$BACKUPdatei 2>>$ERRdatei
    else
        echo "gz-Dateien nicht vorhanden" >>$BACKUPdatei
fi

#Pause 2 Sek
sleep 2

# Plesk Sicherung
cd /home/backup/psa
/usr/local/psa/bin/pleskbackup all psa_dump

cd /home/backup

# Komprimieren der kopierten Ordner
for files in *
  do
     tar -czvf $files.${DATE}.tar.gz $files 1>>$BACKUPdatei 2>>$ERRdatei
  done
  
# Pause 2 Sek
sleep 2

# Daten auf FTP-Backupspace kopieren
# Alle komprimierten Dateien per FTP auf den Backup-Server laden
# Unter dem Punkt "open" sollte der FTP Server eingetragen werden. (z.B. open FTPServer)
# Unter dem Punkt "user" bitte die Zugangsdaten fü FTP Server setzen.(z.B. user FTPName FTPPassword)
ftp -ni <<EOFTP

open backup.serverkompetenz.de
user benutzer pw
bin
delete bin.Fri.tar.gz
delete etc.Fri.tar.gz
delete log.Fri.tar.gz
delete mysql.Fri.tar.gz
delete psa.Fri.tar.gz
delete qmail.Fri.tar.gz
delete srv.Fri.tar.gz
delete ts.Fri.tar.gz     
mput *.gz
quit

EOFTP

#Pause 2 Sek
sleep 2

# Alle gz Dateien loeschen
rm -f *.gz 1>>$BACKUPdatei 2>>$ERRdatei

# Pause 2 Sek
sleep 2

#Endzeit des Script-Durchlaufs
ENDZEIT=`date`

# Backup Ordner Groesse ermitteln und E-Mail versenden
# Variablen fuer Mailversand setzen
DIR=/home/backup
DIRETC=/home/backup/etc
DIRLOG=/home/backup/log
DIRMYSQL=/home/backup/mysql
DIRVHOSTS=/home/backup/srv
DIRQMAIL=/home/backup/qmail
DIRPSA=/home/backup/psa

diskusage0=`du -sm /$DIR | cut -f 1`
diskusage1=`du -sm /$DIRETC | cut -f 1`
diskusage2=`du -sm /$DIRLOG | cut -f 1`
diskusage3=`du -sm /$DIRMYSQL | cut -f 1`
diskusage4=`du -sm /$DIRVHOSTS | cut -f 1`
diskusage5=`du -sm /$DIRQMAIL | cut -f 1`
diskusage6=`du -sm /$DIRPSA | cut -f 1`

diskfree=`df -h /`
raidcheck=`cat /proc/mdstat `


# Pause 2 Sek
sleep 2

MAILdatei=/root/log/backup_mail.log

echo "Hinweis: Das Backup-Verzeichnis belegt zur Zeit $diskusage0 MB." > $MAILdatei
echo " " >> $MAILdatei
echo "Belegung der einzelnen Ordner im Backup-Verzeichnis:" >> $MAILdatei
echo "Size 'ETC'-Ordner: $diskusage1 MB" >> $MAILdatei
echo "Size 'LOG'-Ordner: $diskusage2 MB" >> $MAILdatei
echo "Size 'MYSQL'-Ordner: $diskusage3 MB" >> $MAILdatei
echo "Size 'SRV'-Ordner: $diskusage4 MB" >> $MAILdatei
echo "Size 'QMAIL'-Ordner: $diskusage5 MB" >> $MAILdatei
echo "Size 'PSA'-Ordner: $diskusage6 MB" >> $MAILdatei
echo " " >> $MAILdatei


# Pause 1 Sek
sleep 1

echo " " >>$MAILdatei
echo "Size der Festplatte:" >> $MAILdatei
echo "$diskfree" >> $MAILdatei
echo " " >>$MAILdatei
echo "$raidcheck" >> $MAILdatei
echo " " >>$MAILdatei
echo "Dauer des Script-Durchlaufs:" >> $MAILdatei
echo "START: $STARTZEIT" >>$MAILdatei
echo "ENDE : $ENDZEIT" >>$MAILdatei
echo " " >>$MAILdatei
echo " " >>$MAILdatei

sleep 2

cat $MAILdatei | mail -s "topic" e-mail addy

# Ausstieg
exit 0
Das ist nicht perfekt, aber es funktioniert.
Z.B weiß ich Nicht wie beim ftp eine variable gesetzt wird die das backup von 3 tagen zuvor vom backupserver löscht !?
Deshalb habe ich 7 verschiedene scripts (Montag, Dienstag....) die jeweils einzeln im Cron sind.

Psa und die Daten sichere ich getrennt, weil ich falls jmd. eine datei löscht und das backup wieder braucht, keine lust habe an der psa rum zu spielen.

Achja und diese Datei ist vom Montag.
 

chris085

Registered User
Hallo,

ich habe vor kurzem ein Backup mit diesem Script ausgeführt. Allerdings habe ich jetzt eine 77MB grosse Datenbankdatei mit dem namen mysql.dbs ...

... oki mittlerweile hab ich kapiert das da der eigentlich Datenbankname reingehört hätte. Nun gut, ich hab die datei umbenannt von mysql.dbs zu mysql.sql und sie mir local mit einem Texteditor angesehen. Es sind alle Datenbanken vorhanden. Ca. 60 einzelne Datenbanken, nur eben jetzt als eine Datei. Die Frage ist wie ich die wieder auf dem Server eingespielt bekomme? Debian3.1 mit Plesk8.3

Danke schonmal
Du suchst nach dem jeweiligen Anfang in deinem dump

--
-- Current Database: `datenbank`
--

bis zur jeweiligen nächsten

--
-- Current Database: `datenbank2`
--

und pastest deinen inhalt händisch in deine neu erstellte db.
Datenbanken sind auch nur Textdokumente.
 

Lord_Icon

Blog Benutzer
@blaich

Sag mal... dein Script finde ich Interessant. Würde das gern meine bedüfnisse anpassen und verwenden.

Nur hab ich hier mal 3 Fragen.


1: Die Datein, die du backupen möchtest synconiesiert du mit: rsync in den Ordner /home/backup. Ich verstehe hier nicht den tierferen Sinn der ganzen Sache. Ich ersehe dadurch nur einen Vorteil aber dafür mehrere Nachteile.
Vorteil: Duch die Verwendung "1>>$BACKUPdatei 2>>$ERRdatei" hast du in deinen Log Datein eine schöne Übersicht welche Datein nicht kopiert worden sind. [Ich glaube aber, das ich diesen Befehl auch beim Direkten Packen angeben kann und es dort auch sehen kann, welche Datei nicht gespeichert werden könnte = wenn das stimmt = dann hab ich garkein Vorteil.]
Nachteil: Das Script dauert ewig, weil die Datein erst kopiert werden müßen und dann erst gepackt werden.
Nachteil: Ist meine Platte zu mind. 50% belegt, hab ich schon mal n großes Problem. Denn die Sicherungsdaten sind ja doppelt vorhanden. Hinzu kommt dann nochmal das Sicherungsarchiv.


2: Mit welchen Befehl schickt du denn die gepackten Daten per FTP rüber ?
Ich sehe da nur, das du alle "delete *.Fri.tar.gz" löschst. Aber ich finde nichts, wo du was rüberschickst.


3: Wenn ich die Daten direkt packen lassen = was für Nachteile entstehen mir denn da. Also OHNE vorher die Daten zu rsync
Also:
Code:
tar -czvf /home/backup/srv.${DATE}.tar.gz /srv 1>>$BACKUPdatei 2>>$ERRdatei

Hinweis: Das Prüfen, ob im Verzeichniss /home/backup bereits mindest ein *.gz Datei vorhanden ist, sollte vor vom rsync kommen. Denn du kopierst du vorher in diesen Ordner z.B. /etc. ICH für meinen Fall hab da ein paar *.gz drin. Ergo werden diese nach dem rsync wieder gelöscht.... und fallen somit aus der Sicherung komplett raus.
 
Last edited by a moderator:

chris085

Registered User
@blaich

1: Die Datein, die du backupen möchtest synconiesiert du mit: rsync in den Ordner /home/backup. Ich verstehe hier nicht den tierferen Sinn der ganzen Sache. Ich ersehe dadurch nur einen Vorteil aber dafür mehrere Nachteile.
Vorteil: Duch die Verwendung "1>>$BACKUPdatei 2>>$ERRdatei" hast du in deinen Log Datein eine schöne Übersicht welche Datein nicht kopiert worden sind. [Ich glaube aber, das ich diesen Befehl auch beim Direkten Packen angeben kann und es dort auch sehen kann, welche Datei nicht gespeichert werden könnte = wenn das stimmt = dann hab ich garkein Vorteil.]
Nachteil: Das Script dauert ewig, weil die Datein erst kopiert werden müßen und dann erst gepackt werden.
Nachteil: Ist meine Platte zu mind. 50% belegt, hab ich schon mal n großes Problem. Denn die Sicherungsdaten sind ja doppelt vorhanden. Hinzu kommt dann nochmal das Sicherungsarchiv.
Zu Nachteil 1, es dauert nur beim ersten mal lange, weil rsync kontrolliert ob diese Datei mit dem selben Erstellungsdatum vorhanden oder nicht vorhanden ist und diese ggf. überspringt. Sprich er kopiert nur die neuen und die geänderten Daten.
Von daher Zeit = 2-3 min.

Zu Nachteil 2, es ist richtig, ich verheize Platz. Glücklicherweise habe ich diesen.
Es kommt bei "mir" häufig vor, dass Benutzer ihre Dateien (warum auch immer) löschen oder verändern, so dass der Weg diese Datei neu zu erstellen, wesentlich größer wäre als diese wieder zurückzuspielen. Und so muss ich nicht jedes mal das ganze archiv wieder vom ftp übertragen und lästig entpacken, sondern einfach diese Datei von gestern kopieren.

2: Mit welchen Befehl schickt du denn die gepackten Daten per FTP rüber ?
Ich sehe da nur, das du alle "delete *.Fri.tar.gz" löschst. Aber ich finde nichts, wo du was rüberschickst.
Steht oben

ftp -ni <<EOFTP

open backup.serverkompetenz.de
user benutzer pw

3: Wenn ich die Daten direkt packen lassen = was für Nachteile entstehen mir denn da. Also OHNE vorher die Daten zu rsync
Also:
Code:
tar -czvf /home/backup/srv.${DATE}.tar.gz /srv 1>>$BACKUPdatei 2>>$ERRdatei
Hinweis: Das Prüfen, ob im Verzeichniss /home/backup bereits mindest ein *.gz Datei vorhanden ist, sollte vor vom rsync kommen. Denn du kopierst du vorher in diesen Ordner z.B. /etc. ICH für meinen Fall hab da ein paar *.gz drin. Ergo werden diese nach dem rsync wieder gelöscht.... und fallen somit aus der Sicherung komplett raus.
Ich denke keine, nur dass du nicht so schnell und flexibel bist.

Falls du einen Weg findest Variablen für die Wochentage, wie auch immer in den ftp befehl zu setzen , wäre ich dir für einen Post sehr dankbar.

Gruß
 

Lord_Icon

Blog Benutzer
Falls du einen Weg findest Variablen für die Wochentage, wie auch immer in den ftp befehl zu setzen , wäre ich dir für einen Post sehr dankbar
Nicht unbedingt mit großartigen Variablen gelöst = aber ich denke, das dies für dich auch einsetzbar ist. Zumindest hättest du das, was du haben wolltest erreicht. Nur ändern sich halt deine Dateinamen.

Sieht dann so aus:
Code:
-rw-r--r--   	1 root     root     	 10731288 	Feb  7 11:24 deep-01Feb.tar
-rw-r--r--   	1 root     root            	6879 	Feb  7 11:24 deep-Fri.tar
-rw-r--r--   	1 root     root         	2831 	Feb  7 11:24 deep-Mon.tar
-rw-r--r--   	1 root     root            	7924 	Feb  7 11:25 deep-Sat.tar
-rw-r--r--   	1 root     root     	 11923013 	Feb  7 11:24 deep-Sun.tar
-rw-r--r--   	1 root     root            	5643 	Feb  7 11:25 deep-Thu.tar
-rw-r--r--   	1 root     root            	3152 	Feb  7 11:25 deep-Tue.tar
-rw-r--r--   	1 root     root            	4567 	Feb  7 11:25 deep-Wed.tar
drwxr-xr-x	2 root     root         	1024 	Feb  7 11:20 last-full
Falls dir das zusagt, schau hier
http://www.faqs.org/docs/securing/chap29sec306.html
 

Lord_Icon

Blog Benutzer
sag mal... kanz du mir kurz auf die Sprünge helfen ?

Wie kann ich denn die ausgabe von der FTP Verbindung in eine Datei umleiten ?

Code:
ftp -ni <<EOFTP

open backup.serverkompetenz.de
user benutzer pw
bin
delete bin.Fri.tar.gz
delete etc.Fri.tar.gz
delete log.Fri.tar.gz
delete mysql.Fri.tar.gz
delete psa.Fri.tar.gz
delete qmail.Fri.tar.gz
delete srv.Fri.tar.gz
delete ts.Fri.tar.gz     
mput *.gz
quit

EOFTP

Ich hab jetzt schon folgendes versucht. Hier wird die log Datei zwar erstellt => aber leider nicht gefüllt.
Code:
ftp -ni <<EOFTP > /var/log/backup-ftp.log
Setze ich es beim Absenden, hängt das Script:
Code:
EOFTP > /var/log/backup-ftp.log
Thx
 

Top