Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • DeaD_EyE

    Administrator

    Sie müssen sich registrieren, um eine Verbindung mit diesem Benutzer herzustellen.

15

Backupscript für Webserver und MySQL

Bewertung:

Von DeaD_EyE, Montag, 21. März 2011, 23:05

Sinn des Scripts
Ich habe angefangen für sourceserver.info ein Backupscript zu schreiben, welches die Datenbank und den Inhalt vom FTP sichert. Es sichert die SQL-Dateien mit dem Datumsstring + den Suffix mit bzip2-Kompression. Das FTP-Verzeichnis über lftp mit "mirror" gesichert und danach als tar mit bzip2 kompression abgespeichert. Der Dateiname des Archivs setzt sicht auch aus Datumsstring + Suffix zusammen.

Anwendungsbereich
Das Script eignet sich nur zur Sicherung von entfernten Servern. Sollte sich der Webspace und die Datenbank auf dem gleichen Host befinden, kann das Script zwar auch genutzt werden, macht aber wenig Sinn, da man besser direkt mit den Dateien ohne FTP-Client arbeiten kann. In diesem Fall ist ein Rsync oder einfacher tar-Befehl besser geeignet. Die entfernte Datenbank muss den externen Zugriff zulassen. Dazu muss seitens des Hosters die Datenbank so konfiguriert sein, dass der DB-Server auf der externen IP läuft und der eingerichtete User den extern Zugriff hat.

Konfiguration

Configbeispiel

  • ftp=/home/xxx/backup/ftp
    Lokales Sicherungsverzeichnis für das FTP-Backup
  • sql=/home/xxx/backup/sql
    Lokales Sicherungsverzeichnis für das MySQL-Backup
  • date=`date +"%Y-%m-%d_%H-%M"`
    Datumsstring welcher sich in diesem Beispiel aus Jahr-Monat-Tag_Stunde-Minute zusammensetzt.
  • dbsuffix="_xxx.sql.bz2"
    Dateiname der Datenbank setzt sich aus Datumsstring + Suffix zusammen. In diesem Beispiel würde die Datei "2011-03-21_22-40__xxx.sql.bz2" heißen.
  • dbhost="Domain"
    Entfernter Host auf dem die Datenbank liegt.
  • dbname="DatenbankName"
    Dantenbankname
  • dbuser="DatenbankBenutzer"
    Benutzer, der auf die Datenbank von außen zugreifen darf.
  • dbpasswd="DatenbankPasswort"
    Zugehöriges Passwort.
  • dbparm="--quick --protocol=TCP --opt -C"
    Parameter für die Datenbanksicherung für mysqldump.
  • ftpsuffix="_xxx.tar.bz2"
    Dateiname des FTP-Backups setzt sich aus Datumsstring + Suffix zusammen. In diesem Beispiel würde die Datei "2011-03-21_22-40_xxx.tar.bz2" heißen.
  • ftphost="FTP_Host"
    Hostname oder IP des FTP-Servers.
  • ftpuser="FTP_User"
    User für den FTP-Login.
  • ftppasswd="FTP_Passwort"
    Passwort für den FTP-Login
  • ftpdir="$ftp/$date"
    Dient zu internen Zwecken. Sichert den Inhalt vom FTP-Server nach /home/xxx/backup/ftp/2011-03-21_22-40, packt dieses Verzeichnis nach Beendigung und packt dieses Verzeichnis in die Datei 2011-03-21_22-40_xxx.tar.bz2.
  • ftpremotedir="/"
    Verzeichnis auf dem FTP-Server das gesichert werden soll. In diesem Fall das Wurzelverzeichnis. Bei Servern, auf denen Plesk installiert ist, würde es dann /httpdocs/ bzw. /httpsdocs/ lauten.
  • ftpcmd="mirror"
    Führt für lftp den Befehl mirror aus.
  • ftpparm="--parallel=4 --no-umask -x usage/ -x downloads/ -x old/ -X *.sql.gz -X *.sql"
    Parameter zu dem Befehl mirror. Dieses Beispiel setzt sich folgendermaßen zusammen:
    --parallel=4 -> 4 Downloads gleichzeitig
    --no-umask -> wichtig, wenn die Dateiberechtigungen beibehalten werden sollen
    -x usage/ -x downloads/ -x old/ -> schließt die Sicherung von den Verzeichnissen usage, downloads und old aus
    -X *.sql.gz -X *.sql -> schließt Dateien mit der Endung .sql.gz und .sql aus.


Aufruf des Scripts
Das Shellscript kann mit ./backup.sh --ftp --sql aufgerufen werden.
  • --ftp
    Macht ein Backup vom Webspace mit lftp
  • --sql
    Macht ein Datenbank-Backup mit mysqldump


Voraussetzungen
Das Script benötigt folgende Pakete:
  • lftp
  • tar
  • bzip2
  • mysqldump

Beim Start des Backupscripts wird überprüft ob die Programme installiert sind. Falls eins fehlen sollte, wird eine Fehlermeldung ausgegeben und das Script beendet.

Das Script

backup.sh

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash

#General
ftp=/home/xxx/backup/ftp
sql=/home/xxx/backup/sql

#Date-String
date=`date +"%Y-%m-%d_%H-%M"`

#MYSQL
dbsuffix="_xxx.sql.bz2"
dbhost="Domain"
dbname="DatenbankName"
dbuser="DatenbankBenutzer"
dbpasswd="DatenbankPasswort"
dbparm="--quick --protocol=TCP --opt -C"

#FTP
ftpsuffix="_xxx.tar.bz2"
ftphost="FTP_Host"
ftpuser="FTP_User"
ftppasswd="FTP_Passwort"
ftpdir="$ftp/$date"
ftpremotedir="/"
ftpcmd="mirror"
ftpparm="--parallel=4 --no-umask -x usage/ -x downloads/ -x old/ -X *.sql.gz -X *.sql"

#TESTS
error=0
which lftp >/dev/null || { echo "Error: lftp not found"; error=1 ;}
which tar >/dev/null || { echo "Error: tar not found"; error=1 ;}
which bzip2 >/dev/null || { echo "Error: bzip2 not found"; error=1 ;}
which mysqldump >/dev/null || { echo "Error: mysqldump not found"; error=1 ;}
[[ -d $ftp ]] || { echo "Error: The directory $ftp from \$ftp doesn't exist"; error=1 ;}
[[ -d $sql ]] || { echo "Error: The directory $sql from \$sql doesn't exist"; error=1 ;}
[[ $error == 1 ]] && exit


#CODE
while [[ $# -gt 0 ]]; do
        case "$1" in
                "--sql")
                #sql
                mysqldump $dbparm -h $dbhost -u$dbuser -p$dbpasswd $dbname | bzip2 -c9 > $sql/${date}${dbsuffix}
                ;;

                "--ftp")
                #ftp
                mkdir $ftpdir
                lftp -u $ftpuser:$ftppasswd -e "$ftpcmd $ftpparm $ftpremotedir $ftpdir;quit" $ftphost &> /dev/null
                cd $ftp
                tar -cjf $date$ftpsuffix $date
                rm -Rf $ftp/$date
                ;;
        esac
        shift
done


Andere Backupscripts
Das Backupscript von bash.cyberciti.biz wollte ich euch nicht vorenthalten. Dieses Backupscript wird mit einem Online-Formular generiert. Es ist auch eine Funktion eingebaut, die eine E-Mail verschickt, falls das FTP-Backup fehschlägt.

Dieser Artikel wurde bereits 7 021 mal gelesen.

Tags: Backup, MySQL, Script, Webserver

Kategorien: Allgemein


Blog Navigation

Nächster Artikel

Waffen den Spielern beim Spawn automatisch geben

Von DeaD_EyE (Dienstag, 22. März 2011, 13:54)

Vorheriger Artikel

ESL-Config Downloader

Von DeaD_EyE (Dienstag, 8. März 2011, 20:10)