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
- 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:
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
|
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.