You are not logged in.

Dear visitor, welcome to sourceserver.info. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

  • DeaD_EyE

    Administrator

    You have to register first, to connect to this user.

15

Backupscript für Webserver und MySQL

Rating:

by DeaD_EyE, Monday, March 21st 2011, 11:05pm

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

Source code

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.

This article has been read 10,365 times.

Tags: Backup, MySQL, Script, Webserver

Categories: Allgemein


Blog navigation

Next article

Waffen den Spielern beim Spawn automatisch geben

by DeaD_EyE (Tuesday, March 22nd 2011, 1:54pm)

Previous article

ESL-Config Downloader

by DeaD_EyE (Tuesday, March 8th 2011, 8:10pm)