Page 1 of 1

Backup Script zur Diskussion ;o)

Posted: 2005-01-11 17:00
by Anonymous
Also folgendes Script funktioniert schon mal. Es soll als täglicher CronJob eingefügt werden und mir das Wochenbackup sichern.

Da es eine stark "befahrene" Webseite ist, will ich in der Zeit des Backups die Webseite auf ein anderes Verzeichnis umleiten. Also für den Zeitraum des Backups eine Wartungsseite anzeigen. Mit dem aktuellen System kann ich Schreibzugriffe auf die Datenbank noch nicht sperren.

Das stoppen und starten des Webservers könnte sicher auch etwas anders aussehen, mit -f ini-file, jedoch ists nen Server der durch Confix/Plesk auch administriert wird, so das ich Fehler ausgleichen möchte. Aus dem Grund wird auch jedes Mal die "alte" Config gesichert und später zurückgeschrieben.

Ich poste das hier mal unter dem Aspekt Sicherheit und "gehts auch einfacher?".
Kann ja sein dasich etwas zu kompliziert denke ;o)

Mirko

Code: Select all

#!/bin/sh
#
#
# Init Variablen
DATUM=`date +"%d-%m-%Y_%H"`
TAG=`date +" %a"`

BACKUP=/home/backup.lokal
# Das Verzeichnis in dem die Original Apache conf liegt
webnormal1=/home/httpd/vhosts/yauno.com/conf
# Dahin wird die Datei gesichert, bevor die Datei zum Backup kopiert wird
webnormal2=/home/backup.lokal/wartungsfiles/normal.yauno.com
# die Datei
datei=httpd.include
# die Datei die zum Sichern benötigt wird
webbackup=/home/backup.lokal/wartungsfiles/wartung.yauno.com
# Fehleremail Adresse
mailto="technik@ domain.de"
# Welches Verzeichnis soll gesichert werden? (rsync)
backupvz=/home/htdocs/web0/html/sub-yauno.de/admin
# Temporäres Sicherungsverzeichnis
tempbuvz=/home

# Logindaten FTP-Backupserver
user="ABCDE"
passwd="VWXYZ"
host="backup.domain.de"


# erstellen/löschen Verzeichnisse
# Wir brauchen nur 7 Tage der Woche
cd $BACKUP/db/
rm -fr $TAG/
mkdir $TAG


# Webseite umleiten
# Webserver erst mal anhalten
/etc/init.d/apache2 stop > /dev/null || echo "Script Start: Apache Stop failed" | mail -s "Fehler" $mailto
# kopiere Original Datei
cp $webnormal1/$datei $webnormal2/$datei
# kopiere nun veränderte Datei
cp $webbackup/$datei $webnormal1/$datei
# Webserver wieder starten
/etc/init.d/apache2 start > /dev/null || echo "Script Start: Apache Start failed" | mail -s "Fehler" $mailto

# Backup Datenbanken und sonstiges
nice -n 20 mysqldump yauno | gzip >> $BACKUP/db/$TAG/domain.com.$DATUM.sql.gz
nice -n 20 mysqldump ads | gzip >> $BACKUP/db/$TAG/sun1.domain.de.$DATUM.sql.gz
nice -n 20 mysqldump project | gzip >> $BACKUP/db/$TAG/sub2.domain.de.$DATUM.sql.gz
nice -n 20 mysqldump wiki | gzip >> $BACKUP/db/$TAG/sub3.domain.de.$DATUM.sql.gz
nice -n 20 mysqldump wiktionary | gzip >> $BACKUP/db/$TAG/sub4.domain.de.$DATUM.sql.gz

# Sytem Datenbanken
nice -n 20 mysqldump psa | gzip >> $BACKUP/db/$TAG/psa_$DATUM.sql.gz
nice -n 20 mysqldump horde | gzip >> $BACKUP/db/$TAG/horde_$DATUM.sql.gz
nice -n 20 mysqldump mysql | gzip >> $BACKUP/db/$TAG/mysql_$DATUM.sql.gz

# Geburtstagsgrüße
lynx -dump http://www. domain .com/maintenance.php?setpw=habichauch

# kopiere Webverzeichnis komplett
rsync -avz --ignore-errors --delete $backupvz $BACKUP/files

# Wechsle ins Temporäre Backupverzeichnis
cd $tempbuvz
mkdir $TAG
cd $TAG/

# Komprimieren der Dateien und Verzeichnisse
cd $tempbuvz

tar zcfv $tempbuvz/$TAG/archiv.$TAG.tar.gz $BACKUP/

cd $tempbuvz/$TAG/
# Backup auf den Server schieben
ftp -n $host <<END_SCRIPT
quote USER $user
quote PASS $passwd
put archiv.$TAG.tar.gz
quit
END_SCRIPT

# lösche das temporäre Backupverzeichnis
cd ..
cd $tempbuvz/
rm -fr $TAG/

# Webseite wieder herstellen
# Webserver stoppen
/etc/init.d/apache2 stop > /dev/null || echo "Script End: Apache Stop failed" | mail -s "Fehler" $mailto
# Original File wieder herstellen
cp /home/backup.lokal/wartungsfiles/normal.yauno.com/httpd.include /home/httpd/vhosts/yauno.com/conf/httpd.include
# Webserver wieder starten
/etc/init.d/apache2 start > /dev/null || echo "Script End: Apache Start failed" | mail -s "Fehler" $mailto

exit 0

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-11 17:23
by niemand
Was mir auffällt: Du hast keinerlei Fehlerbehandlung drin.

cu

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-11 17:37
by captaincrunch
Hab's nur kurz überflogen, aber gerade im Shellscript sollte man mit absoluten Pfaden arbeiten.

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-11 17:51
by Anonymous
Hmm.. Fehlerbehandlung ...
Fragt sich wo und wie?

Und das mit den absoluten Pfaden ..
Ich habs extra variabel gehalten, weils sicher noch einige Male mehr benutzt wird.

Wobei sich mir an der Stelle die Frage stellt, kann ich per include eigentlich Zusatzfunktionen aus anderen Scripten einfügen?

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-11 18:47
by Joe User

Code: Select all

#!/bin/bash

foo
source /file/to/include
bar
beziehungsweise:

Code: Select all

#!/bin/bash

foo
. /file/to/include
bar

kleiner Tip bzgl. Seite abschalten

Posted: 2005-01-12 11:10
by juergen
Ist dein Apache entsprechen konfiguriert (AllowOverride), kannst du während des Backups eine .htaccess ins Documentroot legen, das ein Redirekt auf deine temporäre Site macht, dann musst du den Apache nicht Hoch/Runterfahren und eine Fehlerquelle ausschliessen.

Grüße, Jürgen

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-12 11:37
by Anonymous
Ich arbeite auf den Seiten schon recht exzessiv mit mod_rewrite.
Es werden aktuell 6 verschiedene Domains auf eine einzige per mod_rewrite umgeleitet. Auch wird mit mod_rewrite das www vorneweg als Bedinung gesetzt, um überhaupt auf der Seite arbeiten zu können.

Nebeneffekt, seither steigt das "Ranking" auf Goggle ;o)

Ã?nder ich jetzt die .htaccess, gibt es Probleme mit den anderen Domains und später beim wiederherstellen des Urzustandes.
Ich müsste ja auf eine andere Domain verweisen.
Entweder wartung.domain.com oder statt *.com das *.de nutzen.

Auch Deeplinks machen in dem Fall Probleme, da diese auf eine Fehlerseite auflaufen würden oder im Fehlerfall weiterhin auf der Seite schreiben und in die Datenbank schreiben können. Zumal ich den Zugriff für Bilder von externen Seiten gesperrt habe, auch mit der .htaccess.

Aus dem Grund ist die Variante mit dem Umkopieren der VHost.conf die sicherere Sache für mich gewesen.

Auszug aus der .htaccess

Code: Select all

RewriteCond %{HTTP_HOST} !^www.      [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*)        http://www.%{HTTP_HOST}/$1
RewriteCond %{HTTP_HOST} !^www.domain.com      [NC]
RewriteCond %{HTTP_HOST} !^$

RewriteRule ^(.*)               http://www.domain.com/           [R=301][L]

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-12 13:30
by juergen
Ich würde das einfach so machen:

RewriteCond %{REQUEST_URI} !^/baustelle.*
RewriteRule ^(.*)$ http://%{SERVER_NAME}/baustelle/ [R,L]

Dann landen auch alle Deeplinux unter /baustelle

Re: Backup Script zur Diskussion ;o)

Posted: 2005-01-12 13:57
by niemand
Hmm.. Fehlerbehandlung ...
Fragt sich wo und wie?

Code: Select all

wenn (Teilschritt erfolgreich) { 
    nächster Schritt 
} 
sonst { 
    schreibe Fehler in Log;
    maile den Admin an und trink' seinen Kaffee aus;
    steige aus und sieh zu, dass dabei nichts kaputtgeht;
}
cu