MySQL Datenbank Backup auf Amazon S3 speichern

You can find the whole instructions and how to in English when you follow this link: Instructions in English

Datenverluste ohne Datensicherungen sind so gut wie das schlimmste was jedem Webentwickler passieren kann. Ich musste schon 1-2x das ganze auf dem harten Weg erfahren. Inzwischen baue ich jedoch in fast jede Anwendung automatische Back-Ups der Benutzerdaten ein.

Ich stehe dabei voll und ganz auf Cloud Backups, derzeit noch bei Amazon AWS S3 erstens habe ich hier die Möglichkeit meine Region auszuwählen, ich bleibe aufgrund von Datenschutzrichtlinien dabei gerne in der neuen Frankfurt Region, andererseits habe ich auch wirklich geringe Kosten, ich bezahle derzeit pro Monat ca. 0,05$ und das ist mir die Sicherheit meiner Daten definitiv wert. Interessant finde ich auf jeden Fall auch Google Cloud Storage. Google holt inzwischen mit und mit immer mehr im Service Bereich auf und ist wie ich gesehen habe oft auch noch günstiger und bietet mit der Console ein deutlich besseres Benutzerfeeling als AWS. Vielleicht steige ich in Zukunft mal darauf um. (Dann müsste ich das Skript hier allerdings anpassen. ;))

Inzwischen wollte ich das ganze auf dem Webserver der Firma aber automatisieren. Dafür habe ich mir nun ein kleines Bash-Backup Skript geschrieben, welches ich über Crontab jede Nacht um 3:00 Uhr ausführe um möglist keine Nutzer zu stören aber eine gute Backup Abdeckung habe.

Nun möchte ich euch Schritt für Schritt durch den Einrichtungsprozess führen.

0. AWS S3 vorbereiten

S3 Benutzerpolicy

S3 Benutzerpolicy

  1. Zuerst braucht ihr einen Amazon Web Services Account falls ihr den noch nicht besitzt.
  2. Dann einmal ein loggen und einen neuen Bucket (quasi Ordner) für die Backups erstellen.
  3. Optional könnt ihr direkt auch bestimmte sogenannte Lifecycle Policies erstellen. Ich trage dort immer ein das ausschließlich Backups der letzten 30 Tage gespeichert bleiben sollen. Mehr brauche ich nicht, das könnt ihr natürlich anpassen.
  4. Nun müsst ihr im sogenannten IAM einen neuen Benutzer anlegen, mit dem ihr auf euren Bucket zugreifen könnt. Vergebt diesem am besten die Policy AmazonS3FullAccess
  5. Achtet darauf die Access und Secret Keys herunterzuladen, die brauchen wir gleich.

1. s3cmd installieren

s3cmd ist eine Konsole Utility die S3 als Filesystem einbindet und Methoden zum Upload bereitstellt.
Führt folgende Befehle auf um s3cmd auf eurem Server zu installieren, diese Anleitung beschreibt einen Ubuntu Server für andere Distributionen kann sich das ganze ändern.

Achtung! Achtet darauf mindestens Version 1.6.* zu installieren, ältere Versionen unterstützen eine neue Art von Login Verfahren von S3 noch nicht. Die in den Paketquellen vorgehaltenen Versionen sind oft sehr veraltet.

# Installiert s3cmd
sudo apt-get -y install python-setuptools
wget http://netix.dl.sourceforge.net/project/s3tools/s3cmd/1.6.1/s3cmd-1.6.1.tar.gz
tar xvfz s3cmd-1.6.1.tar.gz
cd s3cmd-1.6.1
sudo python setup.py install
# Konfiguriert s3cm
s3cmd --configure

Bei der Konfiguration müsst ihr zu den Access und Secret Keys auch die Region spezifizieren, Frankfurt ist eu-central-1, andere Regionen könnt ihr in der AWS Konsole herausfinden.

2. Skript hochladen

Ladet euch dieses Skript herunter: MySQL zu S3 Backup Skript und passt oben in den ersten Zeilen die Daten an.

Das Skript erstellt ebenfalls ein Verzeichnis backup wo es temporär vor dem hochladen die Dateien ablegt, falls ihr dieses ändern wollt geht dies weiter unten im Code.
Führt dann einmal folgende Befehle aus und überprüft dann ob eine Sicherung erfolgreich hochgeladen wurde.

# Skript ausführbar machen
chmod +x s3backup.sh
# Testlauf los gehts!
./s3backup.sh

3. Automatisch aufrufen lassen

Damit ihr nun nicht jede Nacht um 3:00 Uhr selbst aufstehen müsst um das Skript zu starten, empfiehlt es sich das ganze mit crontab oder runwhen automatisch ausführen zu lassen.

Dazu öffnet ihr mit folgendem Befehl die Crontab Konfigurationsdatei.

crontab -e

Beim ersten Start von Crontab werdet ihr nach einem Editor gefragt, wählt hier einfach nano das ist der einfachste.

Dann fügt ihr folgende Zeile in die Datei ein:

0 3 * * * bash /var/www/s3backup.sh >/dev/null 2>&1

Eventuell müsst ihr den Pfad hier noch ein wenig anpassen. Das Skript wird laut diesem Eintrag, jede Nacht um 3:00 Uhr ausgeführt auch das lässt sich natürlich anpassen.

4. Fertig!

Nun könnt ihr beruhigt schlafen ohne Datenverluste befürchten zu müssen.
Jetzt seid aber ihr dran, habt ihr weitere Idee oder Fragen? Wie löst ihr eure Backup Probleme? Oder habt ihr eine ganz andere Strategie? Ich freue mich auf euer Feedback in den Kommentaren.

Ich bin Kevin, und schreibe hier über Themen die sich von CSS über Designs bis zur testgetriebenen Entwicklung mit PHP erstrecken. Ich arbeite in einer kleinen Firma als PHP-Entwickler und entwickle dort PHP Backends für verschiedene Projekte vorallem mit Laravel. Privat betreibe ich noch diesen Blog und notesafe.

Schreibe einen Kommentar