MySQL Backup über Dropbox

Das Problem dürfte wohl jeder, der seinen Server nicht nur zum simplen Hosten, sondern auch zum Arbeiten bzw. Ausprobieren nutzt, kennen. Irgendwann geht doch mal was schief, … ärgerlich, wenn man gerade in dem Moment an keine Sicherungskopie gedacht hat.

Genau das ist mir auch gestern passiert. Ich wollte eigentlich nur das System ein bisschen auf Vordermann bringen und ein bisschen Feintuning vornehmen, … da war es auch schon geschehen, es ging weder vor noch zurück und zu guter Letzt ließ sich der Server nicht mal mehr hochfahren. Klar man könnte jetzt sagen „never change a running system!„. Ich gehöre da aber eher zur Fraktion: „no risk no fun!

Die meisten Hoster haben eigentlich tägliche Backups für ihre Webspace-Pakete, ebenso wie für ihre Server. Bei Letzteren kosten tägliche Backups allerdings extra, somit muss man sich fürs erste mit wöchentlichen Backups begnügen. Für normale Daten mag das evtl. noch ausreichen, aber gerade für Datenbanken ist das eine ziemlich lange Zeitspanne. Bei mir z.B. führte das zu Letzt zum Verlust von ca. einer Woche statistische Erhebungen mit Piwik.

Sichern der Datenbanken in die Dropbox:

Um dem Vorzubeugen, will ich euch heute eine relativ elegante Lösung präsentieren, wie ihr eure Datenbanken direkt in die Dropbox sichern könnt. Ein großer Vorteil hierbei ist, dass ihr auf die Daten von jedem Ort aus zugreifen könnt, selbst wenn es euren Server einmal voll zerschossen hat!

Anleitung:

Zunächst loggen wir uns mit z.B. Putty via SSH auf unserem Server ein

Nun erstellen wir uns einen neuen Nutzer

adduser dropbox

Ein Passwort brauchen wir hier nicht zwingend notwendigerweise. Theoretisch würde uns auch ein einfacher Ordner reichen, aber der Übersicht halber, erstelle ich in solchen Situationen immer einen neuen Nutzer.

Jetzt wechseln wir in das Home Verzeichnis unseres neuen Nutzers.

cd /home/dropbox

Als nächstes besorgen wir uns den Dropbox-Uploader, entweder via git:

git clone https://github.com/andreafabrizi/Dropbox-Uploader/

oder manuell via curl: 

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

Nun können wir das Script dropbox_uploader.sh ausführen, bzw. müssen erst die passenden Rechte verteilen

chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

Jetzt sollte sich eigentlich der Configuration wizard öffnen. Hier könnt ihr euch anfach an die einzelnen Schritte halten:

dropshell

Damit wäre der erste Teil auch schon fertig. Mit dem Dropbox-Uploader lassen sich bequem beliebige Files in die Dropbox laden. Eine Übersicht der Befehle findet ihr hier.

Es geht uns aber nicht ums einfache Hochladen von Files, sondern um das automatische Sichern unserer Datenbanken in die Dropbox.

Was wir nun also benötigen, ist ein kleines Script, welches diese Aufgabe für uns übernimmt. Dazu legen wir einfach einen neuen Ordner im Home Verzeichnis an, z.B. scripts. Dort erstellen wir uns jetzt ein bash script.

#!/bin/bash
dbuser=DATENBANK NUTZER
dbpass=PASSWORT
dbname=DATENBANK NAME
cd /tmp
Previous=$(date --date="yesterday" +%Y-%d-%m)
Now=$(date +%Y-%d-%m)
File=$Now.sql
oldfile=$dbname-$Previous.sql
mysqldump -u $dbuser -p$dbpass $dbname > /tmp/$File
/home/dropbox/Dropbox-Uploader/dropbox_uploader.sh upload $File db_backups/$dbname-$File
if [ $? -eq 0 ]
then
rm -rf $File
/home/dropbox/Dropbox-Uploader/dropbox_uploader.sh delete db_backups/$oldfile
fi

Natürlich müsst ihr noch dbuser, dbpass und dbname anpassen. Bzw. wenn ihr wie ich Plesk verwendet und die eigentlichen Datenbank Benutzer keinen Zugriff haben, müsst ihr noch die 10. Zeile anpassen. dbuser und dbpass könnt ihr in diesem Fall aber frei lassen.

mysqldump -uadmin -p`cat /etc/psa/.psa.shadow` $dbname > /tmp/$File

Evtl. müsst ihr auch noch den Pfad zum Dropbox-Uploader Script anpassen. In meinem Fall ist das /home/dropbox/Dropbox-Uploader/dropbox_uploader.sh

Zur kurzen Erklärung. Das Script erstellt eine Sicherungskopie der ausgewählten Datenbank und lädt diese unter dem Namen: Datenbankname-Datum.sql in die Dropbox. Zusätzlich wird geprüft ob eine ältere Version vom letzten Tag vorhanden ist, diese wird ggf. gelöscht.

Ob das ganze Funktioniert könnt ihr nun erst einmal mittels SSH überprüfen:

/home/dropbox/scripts/db_geekmonkey

In diesem Bsp. ist db_geekmonkey der Name meines Scriptes. Ihr müsst hier natürlich den Namen eures Scriptes verwenden. Wenn alles soweit geklappt hat, dann solltet ihr eine kurze Rückmeldung in der Shell bekommen, dass Datenbankname-Datum.sql in die Dropbox hochgeladen wurde, bzw. einen Fehler, dass es keine Datei zum Löschen gibt.

Damit wir das Script nicht immer von Hand aufrufen müssen, sondern unsere Datenbank täglich gesichert wird, erstellen wir uns einen simplen Cronjob hierfür. Bei CentOS z.B. habt ihr unter /etc/cron.d die Möglichkeit eigene Cronjobs anzulegen.

Wie so ein Cronjob aussieht, sehr ihr hier:

SHELL=/bin/sh
MAILTO="mail@xxx"
0 4 * * * root /home/dropbox/scripts/db_geekmonkey > /dev/null

Kurze Erklärung, jeden Tag um 4 Uhr Nachts wird db_geekmonkey ausgeführt. Die Zeit habe ich deshalb gewählt, da die Besucherzahlen dort erfahrungsgemäß eher gering sind. Weitere Erklärungen zum Thema Cronjob findet ihr hier. Eine email Adresse müsst ihr nicht zwingend angeben, würde ich aber jedem empfehlen, da auch evtl. Fehlermeldungen an euch weitergeleitet werden.

Natürlich lassen sich nicht nur Datenbanken mit dem Dropbox-Uploader sicher, eurer Kreativität sind hier keine Grenzen gesetzt. Das Prinzip funktioniert immer gleich.

Ich hoffe ich konnte dem Ein oder Anderen von euch Helfen und eure Datenbanken sind nun sicher verwahrt! Bei Fragen stehe ich wie gewohnt zur Verfügung, gerne auch per mail.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein