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:

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:

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:

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!

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.

Über

Jahrgang 87, gelernter Softwareentwickler und fast ein Jahrzehnt Erfahrung im Bereich Web-Entwicklung mit PHP und Web-Design. Diese Eigenschaften machen mich zu einem geeigneten und geschätzten Ansprechpartner für die Umsetzung Ihres Projektes. Weiterhin bin ich seit Ende 2013 Magento Certified Developer.

3 Kommentare


  • Hallo Matthias, vielen Dank für dein Script, welches ich für meine Zwecke übernehmen möchte. Allerdings stehe ich vor dem Problem, dass All-Inkl ein Passwort benötigt. In deinem Scipt ist dies auch nicht angegeben. Wie muss man nun vorgehen, denn das ganze soll ja automatisch stattfinden. Danke vorab.

  • Guten Tag,

    danke für das Script!
    Ich hab ein paar Anmerkungen aus dem Jahre 2017 bzw. Ergänzungen:

    mysqldump (installiert über das MariaDB Paket) liegt mittlerweile hier: /bin/mysqldump

    Beim Benutzer bin ich etwas anders vorgegangen, nachdem ich die hier beschrieben Schritte erfolglos ausprobiert hatte.

    Der Benutzer heißt immer noch „backup“, ich habe ihn allerdings zuerst als Administrator angelegt.
    Dann habe ich mich als dieser Benutzer per SSH mit der Synology verbunden um einen SSH Public Key zu generieren. Diesen habe ich bei All-Inkl.com hinterlegt.
    Ohne diesen Schritt konnte ich die beiden Scripte nicht als „backup“ Benutzer ausführen da die SSH-Verbindung mit dem Server nicht geklappt hat.
    An dieser Stelle kann man per SSH auch mal kurz die beiden Scripte ausprobieren, dabei erkennt man direkt woran es scheitert.
    Außerdem erhält man beim ersten Verbindungsaufbau mit dem Server die Meldung, ob man dem Server vertrauen will. Das kann man direkt bestätigen.

    Danach habe ich den Backup-Benutzer wieder auf die Gruppe „users“ umgestellt.
    Im Reiter „Applikationen“ muss rsync aktiviert werden und der Benutzer muss mindestens Leseberechtigung für den Ordner „homes“ bekommen.
    Das Backup lief gestern 1x per Hand und heute Nacht dann vollkommen automatisch.

    Eine Sache werde ich noch ändern: nächtlich ein Backup mittels rsync in einen Ordner der immer synchronisiert wird und den aktuellsten Stand wiederspiegelt und dann regelmäßig alle X Tage ein kompletter Snapshot in einen Ordner mit jeweiligen Datum als Namen (also so wie hier beschrieben).
    Bei 5 GB pro nächtlichem Backup wird irgendwann die größte Platte zu klein.

Kommentar verfassen