Backup Script zur Diskussion ;o)

Bash, Shell, PHP, Python, Perl, CGI
Anonymous

Backup Script zur Diskussion ;o)

Post by Anonymous » 2005-01-11 17:00

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

niemand
Posts: 142
Joined: 2003-12-12 18:36

Re: Backup Script zur Diskussion ;o)

Post by niemand » 2005-01-11 17:23

Was mir auffällt: Du hast keinerlei Fehlerbehandlung drin.

cu

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: Backup Script zur Diskussion ;o)

Post by captaincrunch » 2005-01-11 17:37

Hab's nur kurz überflogen, aber gerade im Shellscript sollte man mit absoluten Pfaden arbeiten.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

Anonymous

Re: Backup Script zur Diskussion ;o)

Post by Anonymous » 2005-01-11 17:51

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?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11602
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Backup Script zur Diskussion ;o)

Post by Joe User » 2005-01-11 18:47

Code: Select all

#!/bin/bash

foo
source /file/to/include
bar
beziehungsweise:

Code: Select all

#!/bin/bash

foo
. /file/to/include
bar
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

juergen
Posts: 133
Joined: 2004-03-30 14:44

kleiner Tip bzgl. Seite abschalten

Post by juergen » 2005-01-12 11:10

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

Anonymous

Re: Backup Script zur Diskussion ;o)

Post by Anonymous » 2005-01-12 11:37

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]

juergen
Posts: 133
Joined: 2004-03-30 14:44

Re: Backup Script zur Diskussion ;o)

Post by juergen » 2005-01-12 13:30

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

niemand
Posts: 142
Joined: 2003-12-12 18:36

Re: Backup Script zur Diskussion ;o)

Post by niemand » 2005-01-12 13:57

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