Backup über Shell-Script erstellen und lokal speichern


Backups sind essentiell vor jeglichen Änderungen an einer Website und sollen deshalb regelmässig und am Besten ohne grossen Aufwand zuverlässig erstellt werden können. Unser Artikel «Backup einer Website erstellen» beschreibt dabei einige Möglichkeiten.

Dieser Artikel ist eine Anleitung, um ein Backup-Script selber zu erstellen. Es werden dabei grundlegende Kenntnisse mit dem Umgang in der Kommandozeile/Shell vorausgesetzt oder das Interesse sich diese selbständig anzueignen.

Funktionsweise des Scripts

Grundsätzlich geht das Script wie unter «Manuelles Backup per SSH» im Artikel «Backup einer Website erstellen» vor, nur eben automatisch.

Es werden also alle Dateien eines definieren Verzeichnisses komprimiert und auf das lokale Gerät herunter geladen, ebenso die angegeben Datenbank, welche lokal exportiert wird.

Script installieren

1

Erstellen Sie eine Datei mit der Dateiendung .sh, z. B. backup-script-cyon.sh.

vim /Users/<Benutzername>/Documents/backup-script-cyon.sh
2

Fügen Sie nun folgenden Code ein:

#!/bin/bash
#- cyon_bkp_local.sh 0.1
#- Copyright (C) 2019 Stefan Schneider - cyon GmbH

##
## Usage: cyon_bkp_local configfile

# History:
# 09.05.2019 - Erste Version


NAME="" # Name des Backups
USER="" # Webhosting-Benutzer
SERVERNAME="" # Servername oder Domain
DATABASE="" # Datenbankname
DIRECTORY_SERVER="" # zu sicherndes Verzeichnis auf dem Server
DIRECTORY_LOCAL="" # Verzeichnis, lokaler Speicherort
DATABASEUSER="$DATABASE" # Datenbankbenutzer

source $1

DATE=`date +%y%m%d-%H%M`
BACKUPNAME="$DATE"_"$NAME"_backup

# Return Codes:
E_NOARGS=3
E_STDERR=1
SUCCESS=0
MIN_PARAMS=1


# Echo variables and ask to continue
echo -e "Name der Installation:\t$NAME"
echo -e "Webhosting-Benutzer:\t$USER"
echo -e "Servername oder Domain:\t$SERVERNAME"
echo -e "Datenbankname:\t \t$DATABASE"
echo -e "Datenbankbenutzer:\t$DATABASEUSER"

echo -e "Server-Verzeichnis:\t$DIRECTORY_SERVER"
echo -e "lokales Verzeichnis:\t$DIRECTORY_LOCAL"


read -r -p "Passt so? [y/N] " response
case "$response" in
    [yY][eE][sS]|[yY])
        echo "Verbinde auf den Server..."
        echo ""
        echo "Erstelle Datenbankdump..."

        ssh "${USER}"@"${SERVERNAME}" "mysqldump -u ${DATABASEUSER} -p ${DATABASE} > /home/${USER}/tmp/${BACKUPNAME}.sql.gz"
        if [[ $? != 0 ]]; then echo "Konnte Datenbank nicht dumpen"; exit $?; fi
        echo "Datenbank gedumpt"
        echo ""
        echo "Komprimiere Webseite..."
        ssh "${USER}"@"${SERVERNAME}" "tar -czf /home/${USER}/tmp/${BACKUPNAME}.tar.gz ${DIRECTORY_SERVER}"
        if [[ $? != 0 ]]; then echo "Konnte Webseite nicht komprimieren"; exit $?; fi
        echo "Webseite komprimiert"
        echo ""
        if [ ! -d "${DIRECTORY_LOCAL}" ]; then
        echo "${DIRECTORY_LOCAL} existiert nicht, erstelle Verzeichnis.."
        mkdir -p $DIRECTORY_LOCAL
            fi

        echo "Kopiere Daten..."
        rsync -avSP "${USER}"@"${SERVERNAME}":/home/"${USER}"/tmp/${BACKUPNAME}.sql.gz ${DIRECTORY_LOCAL}/
        rsync -avSP "${USER}"@"${SERVERNAME}":/home/"${USER}"/tmp/${BACKUPNAME}.tar.gz ${DIRECTORY_LOCAL}/
        if [[ $? != 0 ]]; then echo "Kopieren der Daten fehlgeschlagen"; exit $?; fi
        echo "Daten kopiert"
        echo ""

        echo "Entferne Backups auf dem Server..."
        ssh "${USER}"@"${SERVERNAME}" "rm -v /home/${USER}/tmp/$BACKUPNAME.tar.gz"
        ssh "${USER}"@"${SERVERNAME}" "rm -v /home/${USER}/tmp/$BACKUPNAME.sql.gz"
        if [[ $? != 0 ]]; then echo "Entfernen der Daten vom Server fehlgeschlagen"; exit $?; fi
        echo "Backups auf dem Server entfernt"
        echo ""
        echo "Done! Backups von Datenbank und Webseite wurden in $DIRECTORY_LOCAL abgespeichert"

        ;;
    *)
        exit $SUCCESS
        ;;
esac

exit $SUCCESS
3
Speichern und schliessen Sie die Datei.
4

Damit das Script ausgeführt werden kann, ändern Sie noch die Dateiberechtigung auf  755.

chmod 755 /Users/<Benutzername>/Documents/backup-script-cyon.sh
Beachten Sie, dass es sich bei diesem Script lediglich um ein Anwendungsbeispiel handelt und wir dessen Vollständigkeit nicht garantieren können. Haben Sie Fragen zum Erstellen von Shell-Scripts, so bitten wir Sie die Dokumentation der jeweiligen Script-Sprache und deren Community zur Hilfe zu nehmen.

Konfigurationsdatei(en) erstellen

Das Script ist nun installiert. Um dem Script mitzuteilen, wo die Daten für das Backup liegen und wohin diese gespeichert werden sollen, erstellen wir nun pro Website eine weitere Datei, welche als Konfigurationsdatei dient.

1

Erstellen Sie eine Textdatei, z. B. bkp-oliverorange.txt.

vim /Users/<Benutzername>/Documents/bkp-oliverorange.txt
2

Fügen Sie nun folgenden Code ein und ergänzen Sie die Angaben mit den Werten der gewünschten Website.

NAME="" # Name des Backups
USER="" # Webhosting-Benutzer
SERVERNAME="" # Servername oder Domain
DATABASE="" # Datenbankname
DATABASEUSER="" # Datenbankbenutzer
DIRECTORY_SERVER="" # zu sicherndes Verzeichnis auf dem Server, absoluter Pfad
DIRECTORY_LOCAL="" # Verzeichnis, lokaler Speicherort, absoluter Pfad

Ein Beispiel für oliverorange.ch könnte wie folgt aussehen:

Und hier der komplette Code des Beispiels:

NAME="oliverorange" # Name des Backups
USER="olivero2" # Webhosting-Benutzer
SERVERNAME="s003.cyon.net" # Servername oder Domain
DATABASE="olivero2_wp262" # Datenbankname
DATABASEUSER="olivero2_wp262" # Datenbankbenutzer
DIRECTORY_SERVER="/home/olivero2/public_html/oliverorange.ch/" # zu sicherndes Verzeichnis auf dem Server, absoluter Pfad
DIRECTORY_LOCAL="/Users/<Benutzername>/Desktop/" # Verzeichnis, lokaler Speicherort, absoluter Pfad
3
Speichern und schliessen Sie die Datei. Haben Sie weitere Websites, welche Sie mit einem Script lokal speichern möchten, so erstellen Sie nun für jede Website eine solche Datei.

Backup-Script ausführen

Das Backup-Script ist nun eingerichtet und kann verwendet werden. Um ein Backup zu erstellen, geben Sie den absoluten Pfad zur Script-Datei gefolgt durch den absoluten Pfad zur gewünschten Konfigurationsdatei ein.

1

Geben Sie die beiden Pfade durch ein Leerzeichen getrennt ein.

/Users/<Benutzername>/Documents/backup-script-cyon.sh /Users/<Benutzername>/Documents/bkp-oliverorange.txt
2

Das Script zeigt Ihnen nun die Werte aus der Konfigurationsdatei zur Bestätigung an.

Name der Installation:	oliverorange
Webhosting-Benutzer:	olivero2
Servername oder Domain:	s003.cyon.net
Datenbankname:		olivero2_wp262
Datenbankbenutzer:	olivero2_wp262
Server-Verzeichnis:	/home/olivero2/public_html/oliverorange.ch/
lokales Verzeichnis:	/Users/<Benutzername>/Desktop/
Passt so? [y/N]
3
Fahren Sie mit y fort oder brechen Sie den Vorgang mit N ab.
4

Das Script erzeugt nun ein komprimiertes File des angegebenen Verzeichnisses und lädt ein komprimierter Datenbank-Dump herunter.

190520-1050_oliverorange_backup.sql.gz
190520-1050_oliverorange_backup.tar.gz
Haben Sie Ihre SSH-Keys noch nicht gespeichert, so empfehlen wir dies noch gemäss dem Artikel «SSH-Key erstellen» zu tun. Sie ersparen sich somit das mehrfache Eingeben Ihres Webhosting-Passwortes.
Weitere Artikel zum Thema Weitere Artikel zum Thema Technisches