Komplettes Webserver-Backup auf eine Synology DiscStation

Wie schon berichtet, steht bei mir zu Hause eine Synology DS214+. Nun läuft diese Seite (und auch meine anderen Seiten) alls bei all-inkl. Dort habe ich ein Premium-Paket mit SSH-Zugang. Das Ganze bietet sich natürlich an, um regelmäßig ein Backup des kompletten Servers zu machen und auf der Synology zu speichern. Dabei ist der Plan, täglich die kompletten Daten und auch die mysql-Datenbanken zu sichern.

Was braucht man dafür?

  • SSH-Zugang
  • Einen Benutzer auf der Synology, welcher mit Key-Authentication auf den Webserver darf (dazu muss für den neuen Benutzer ein Key erstellt werden, welcher auf dem Webserver hinterlegt wird). Wie genau das geht, erklären hunderte von Beiträgen im Netz.
  • Etwas Platz auf der DiscStation

Ich habe mir dazu einen neuen Benutzer namens „backup“ (kreativ, oder?) auf der Synology angelegt, welcher als einziger Zugriff auf einen neuen gemeinsamen Ordner Namens „backup“ bekommt. Alle anderen Benutzer dürfen dort nicht schreiben – außer die Administratoren.

Synology_Backup_Verzeichnis

Soweit, so gut. Danach habe ich die Datei „backup_webserver.sh“ im Home-Verzeichnis des Backup-Users erstellt und einen neuen Cronjob eingerichtet, welches dieser Datei jeden Tag um 23 Uhr ausführt.

Synology_Backup_Cron_Web

Natürlich ist hinter „sh“ ein Leerzeichen und kein Zeichenumbruch. Die Textbox ist etwas klein geraten!

Der Inhalt der Datei ist dabei relativ simpel:

#!/bin/bash

current_date=$(date +"%Y-%m-%d")

USER="ssh-w0123456"
SERVER="domain.de.w0123456.kasserver.com"
PORT="22"
SOURCE="/www/htdocs/w0123456/"
TARGET="/volume1/backup/$current_date/data/"
LOG="/volume1/backup/$current_date/backup_data.log"

mkdir /volume1/backup/$current_date

rsync -avz --progress -e "ssh -p $PORT" $USER@$SERVER:$SOURCE $TARGET >> $LOG 2>&1

Unter /volume1/backup/ wird nun also jeden Tag ein neues Verzeichnis erstellt, welches den kompletten Inhalt per rsync herunterlädt. Soweit, so gut. Aufräumen muss man noch selbst! Nach mehreren Monaten wird sich hier also ordentlich was ansammeln.

Fehlt noch die Datenbank. Damit wir das Kommando „mysqldump“ nutzen können, muss das Paket „MariaDB“ über die Paketverwaltung installieren. Ich habe den Dienst nach der Installation direkt wieder gestoppt, um Rechenleistung zu sparen. Die entsprechenden Binaries findet man dann unter „/usr/syno/mysql/bin/mysqldump“.

Für alle Datenbanken habe ich eine CSV-Dateie erstellt, welche nach folgendem Schema aufgebaut ist:

benutzer;passwort
benutzer;passwort
benutzer;passwort
benutzer;passwort

Bei all-inkl ist der Benutzername auch immer gleich der Datenbankname – ansonsten bräuchte man noch eine Spalte.

Das Script sieht dann wie folgt aus:

#!/bin/bash
current_date=$(date +"%Y-%m-%d")
BACKUPDIR="/volume1/backup"
MYSQLTARGET="$BACKUPDIR/$current_date/mysql"

HOST="domain.de.w0123456.kasserver.com"

mkdir ${MYSQLTARGET}

OLDIFS=$IFS
IFS=";"
while read user password
do
    echo "Backing up ${user}"   
    /usr/syno/mysql/bin/mysqldump --opt -h ${HOST} -u${user} -p${password} --databases ${user} | gzip -c -9 > ${MYSQLTARGET}/${user}.gz
done < $1
IFS=$OLDIFS

Fertig! Nun dafür auch noch einen Cron einrichten.

Synology_Backup_Cron_MySql

Und schon laufen jede Nacht die entsprechenden Jobs!

Aufräumen nicht vergessen!

[asa]B00G6AX604[/asa]

[asa]B00X17ZWB6[/asa]

[asa]B00GK48610[/asa]

Bitte habt Verständnis dafür, dass ich für die genannten Scripte natürlich keine Garantie gebe. Es können sich natürlich immer Fehler einschleichen, welche zu Datenverlust führen. Ich bitte Dich daher, die hier gezeigten Scripte nur einzusetzen, wenn Du genau weißt was Du machst.


Beitrag veröffentlicht

in

, , ,

von

Schlagwörter: