• Helmut Weber
  • 23.07.2011

Datensicherung einer Website mit MySQL-Datenbank


Eine Datensicherung einer Website wird meist dann schmerzlich vermisst, wenn man sie am meisten benötigt. Nämlich wenn die Website gar nicht mehr, oder nur noch fehlerhaft läuft. Dabei ist das Erstellen einer Datensicherung, wenn man die entsprechenden Voraussetzungen hat, mit weniger Handgriffen zu erledigen.

Diese Dokumentation beschreibt, wie man eine manuelle Datensicherung einer Website mitsamt einer dazu gehörenden MySQL-Datenbank anlegt. Dies ist vor allem vor einem Update eines Content-Management-Systems wie Joomla oder Typo3 oder einem Online-Shop wie Magento oder OXID sinnvoll.

Voraussetzungen

Die Website läuft auf einem Linux-Server und es besteht ein SSH-Zugang zu diesem Server. Auf einem Windows-Server sind die beschriebenen Kommandozeilen-Tools evtl. nicht vorhanden, und ohne SSH-Zugang hat man keinen Zugriff auf diese Werkzeuge.

Sichern der Website

Als erstes sollte das komplette Projekt-Verzeichnis, in dem alle Dateien der Website liegen gesichert werden. Hierfür eignet sich hervorragend das Archivierungsprogramm tar, welches eigentlich auf jedem Linux-System verfügbar sein sollte. Der Vorteil bei diesem Vorgehen besteht darin, dass neben den eigentlichen Dateien und Verzeichnissen auch die dazu gehörenden Eigentümer und Berechtigungen gespeichert werden.

cd /srv/www/projektname/httpdocs
tar -czf /home/benutzer/projektname.tar.gz *

Die Parameter für tar haben folgende Bedeutung:

-c, --create
neues Archiv erzeugen
-z, --gzip
Archiv mit gzip komprimieren
-f
Archiv in Datei schreiben, die nachfolgend angegeben wird

Sichern der MySQL-Datenbank

Die Sicherung der MySQL-Datenbank erfolgt mit dem Kommandozeilen-Tool mysqldump. Dabei wird für die angegebene Datenbank ein so genannter Datenbankabzug (Dump) erzeugt. Ein solcher Dump enthält die komplette Struktur der Datenbank mit allen Inhalten in Form von SQL-Anweisungen. Dadurch lässt sich eine Datenbank vollständig rekonstruieren. Um die Dateigröße gering zu halten, wird die Ausgabe des Dump nicht direkt in eine Datei geschrieben, sondern mittels gzip komprimiert.

mysqldump -ubenutzer -p --databases datenbankname | gzip -c  >/home/benutzer/projektname.sql.gz

Nach dem Ausführen des Befehls erwartet mysqldump die Eingabe des Kennwortes des angegeben Benutzers. Bei Bedarf kann der mysqldump-Befehl um weitere Parameter ergänzt werden:

--add-drop-database
Fügt eine DROP DATABASE-Anweisung vor jede CREATE DATABASE-Anweisung ein.
--add-drop-table
Fügt eine DROP TABLE-Anweisung vor jede CREATE TABLE-Anweisung ein.
--compatible=name
Erzeugt eine Ausgabe, bei der die Kompatibilität mit anderen Datenbanksystemen oder älteren MySQL Servern höher ist. Die Kompatibilität wird über den Parameter name übergeben.

Übertragen der Datensicherung auf einen anderen Server

Um bei einem Ausfall des Servers weiterhin Zugriff auf die Datensicherung zu haben ist es Sinnvoll, die Sicherungsdateien auf einem anderen Server zu übertragen. Diese Übertragung kann mittels scp erfolgen:

scp /home/benutzer/projektname.tar.gz benutzer@example.org:/home/benutzer/
scp /home/benutzer/projektname.sql.gz benutzer@example.org:/home/benutzer/

Außerdem ist es immer Sinnvoll die Rücksicherung einer Datensicherung zu prüfen, bevor man auf diese angewiesen ist. Dies kann ohne die aktuelle Website zu gefährden auf dem Backup-Server erfolgen.

Rücksicherung der Website

Wenn man nun die Datensicherung wieder einspielen möchte, nutzen wir wieder das Kommandozeilen-Tool tar um unsere Sicherungs-Datei in das Projekt-Verzeichnis zu entpacken. Dabei gehen wir wie folgt vor:

cd /srv/www/projektname/httpdocs
rm -r *
cp /home/benutzer/projektname.tar.gz ./
tar -xzf projektname.tar.gz
rm projektname.tar.gz

Vorsicht! Alle zuvor im Projekt-Verzeichnis /srv/www/projektname/httpdocs befindlichen Dateien werden dadurch unwiederbringlich gelöscht!

Rücksicherung der MySQL-Datenbank

Den erzeugten Datenbank-Dump müssen wir nun in die MySQL-Datenbank zurück spielen. Dies geschieht mit folgendem Befehl:

zcat /home/benutzer/projektname.sql.gz | mysql -ubenutzer -p datenbankname

Vorsicht! Beim Einspielen des Datenbank-Dumps werden die Daten einer bereits angelegten Datenbank unwiederbringlich gelöscht!

Schlussbemerkung

Die in dieser Dokumentation beschriebene Datensicherung ersetzt keine regelmäßige Datensicherung, die für jedes Web-Projekt eingerichtet werden sollte.