Raspberry Pi als MySQL-Backup-Server für eine Webhoster-Datenbank

ELektronik-KOmpendium.de
Online

Preis auf Anfrage
Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen

Wichtige informationen

  • Kurs
  • Online
Beschreibung

Raspberry Pi als MySQL-Backup-Server für eine Webhoster-Datenbank Wenn man eine Webseite mit einer MySQL-Datenbank bei einem klassischen Webhoster betreibt, dann hat man das Problem, dass man hier kein anständiges Backup machen kann. Man kann das zwar manuell mit phpMyAdmin oder ähnlichen Tools erledigen. Doch leider muss man das eben manuell machen. Es gibt auch Tools, die das vollautomatisch erledigen. Doch dann liegt das Backup immer noch auf dem Server des Webhosters. Es wäre allerdings besser, man könnte das Backup vollautomatisch auf einen eigenen Rechner ziehen. Um ein Backup von einer MySQL-Datenbank zu machen gibt es viele Lösungen. Die meisten gehen davon aus, dass das Backup auf dem Webhoster-Server gesteuert wird. Allerdings hat man auf dem Server eines Webhosters meist nur eingeschränkte Möglichkeiten. Und einen Root-Server hat und will nicht jeder. Wegen dieser Problematik hatte ich ursprünglich einen Mini-Computer mit Windows XP dauerhaft laufen, auf dem DumpTimer für MySQL (http://www.richtsoft.com/) installiert war. Das hat einige Jahre recht gut funktioniert. Leider ist Windows XP inzwischen veraltet und Dumptimer wird nicht mehr gepflegt. Zwei gute Gründe, sich von dieser Installation zu verabschieden und eine neue Lösung zu suchen.

Wichtige informationen

Themenkreis

Ideen für eine Lösung mit dem Raspberry Pi als MySQL-Backup-Server

Die Ausgangssituation ist die, dass hier im Heim-Netzwerk ein Raspberry Pi mit Raspbian laufen soll. Dort soll zeitgesteuert einmal in der Nacht eine Verbindung zum Webhoster-Server aufgebaut werden, ein MySQL-Backup angestoßen und anschließend ein Download des Backups erfolgen.

Die üblichen Lösungen sehen so aus, dass man sich per SSH auf den Webhoster-Server einloggt, einen MySQL-Dump auslöst und anschließend die Datei herunterlädt. Das kann man mit einem einfachen Einzeiler auf der Kommandozeile erledigen.

ssh -C {USER}@{HOST} "mysqldump -u {DB-USERNAME} --password={DB-USER-PASSWORT} --add-drop-table --complete-insert {DB-NAME} --socket=/tmp/mysql5.sock" | gzip > db.sql.gz

Das Ganze hat den Nachteil, dass es manuell funktioniert, aber nicht Script-gesteuert, weil man immer noch das SSH-Passwort für den Webhoster-Server eingeben muss. Schnell kommt man dann auf Tools wie "sshpass", dass in der Lage ist Script-gesteuert beim SSH-Login das Passwort einzugeben. Doch leider ist das ziemlich krüppelig und funktioniert nicht wirklich. Zumindest nicht auf Anhieb.

Der nächste logische Schritt wäre die Einrichtung von SSH-Schlüsseln. Das heißt, SSH-Login mit mit Passwort, sondern Zertifikat. Doch leider bekommt man nicht immer einen Zugriff auf die SSH-Einstellungen des Webhoster-Servers, um das einzurichten. Es sei denn man hat einen Root-Server. In dem Fall aber nicht.

Die üblichen Lösungen funktionieren also nicht. Was also tun?

Alternative Lösung

Gehen wir mal von dem Gedanken weg, dass die Übertragung mit SSH erfolgen muss. Was haben wir dann noch? Eigentlich nur noch HTTPS (nicht HTTP). Welche Möglichkeiten ergeben sich?
Denkbar wäre, dass man ein PHP-Skript auf dem Webserver anstößt, dass den MySQL-Dump anlegt. Das ist kein Problem. Der zweite Schritt würde darin bestehen, dass man den Dump per HTTPS herunterlädt. Auch kein Problem.
Der gesamte Vorgang kann von einem Bash-Script auf dem Raspberry Pi gesteuert werden.
Zur Sicherheit würde man noch das Verzeichnis in dem das PHP-Skript und der Dump liegen per Passwort schützen (HTTP Basic Authentication). Die meisten Webhoster bieten in Ihren Konfigurationsoberflächen die Einrichtung dafür an.

Lösung mit HTTPS im Detail

Wie also sieht die Lösung im Detail aus?

Wir erstellen ein PHP-Script mit der Bezeichnung "backupdb.php", dass beim Aufruf einen MySQL-Dump auslöst. Das Verzeichnis, in dem das PHP-Script liegt sollte Passwort-geschützt sein, weil dort auch der Dump gespeichert wird.

<?php system('mysqldump -u {DB-USERNAME} --password={DB-USER-PASSWORT} --add-drop-table --complete-insert {DB-NAME} --socket=/tmp/mysql5.sock | gzip > backupdb.sql.gz'); echo '+DONE'; ?>

Ein zweites Script mit der Bezeichnung "backupdb.sh" befindet sich auf dem Raspberry Pi im Home-Verzeichnis von "pi" (/home/pi/backupdb). In dem Script wird das PHP-Script aufgerufen und anschließend der Dump heruntergeladen.

#! /bin/bash # Backup/Dump auslösen wget -q --spider --http-user={HTTP-USER} --http-password={HTTP-PASSWORT} https://{SERVER}/backupdb/backupdb.php # Download wget -q -N --http-user={HTTP-USER} --http-password={HTTP-PASSWORT} -P /home/pi/backupdb/ https://{SERVER}/backupdb/backupdb.sql.gz

Das Bash-Skript muss man noch ausführbar machen.

sudo chmod +x backupdb.sh

Wenn das manuelle Ausführen des Bash-Scripts funktioniert, kann man es in die Crontab eintragen.

sudo nano /etc/crontab

Hier fügt man folgende Zeile unten an:

0 2 * * * pi bash /home/pi/backupdb/backupdb.sh

"0 2 * * *" führt das Script einmal Nachts um 2 Uhr aus. "pi" bedeutet mit den Rechten des Benutzers "pi".

Fertig ist dass vollautomatische Backup einer MySQL-Datenbank auf einem Webhoster-Server.

Erweiterung: MySQL-Dump auf USB-Stick speichern

Eine SD-Card, wie sie im Raspberry Pi eingesteckt ist, eignet sich weniger gut, um darauf Daten im großen Stil zu speichern. Es empfiehlt sich, regelmäßig anfallende Daten, wie bei diesem MySQL-Datenbank-Backup, auf einem USB-Stick zu speichern.

  • USB-Stick automatisch einbinden
Weitere verwandte Themen:
  • Raspberry Pi als Server im Dauerbetrieb (24/7, headless)
  • Webserver auf dem Raspberry Pi einrichten (lighttpd)
  • Backup von Daten auf dem Raspberry Pi erstellen
  • FTP-Server auf dem Raspberry Pi einrichten

Hinweis: Dieses Tutorial ist Teil einer Aufgaben und Übungen mit dem Raspberry Pi-Reihe, die für Lern- und Ausbildungszwecke erstellt wurde. Die dargestellte Lösung ist Teil einer konkreten Aufgabenstellung, die Schüler, Auszubildende und Studenten, lösen sollen. Deshalb muss der hier aufgezeigte Weg nicht der Optimalfall sein.


Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen