Datensicherung ist ein elementarer Bestandteil der Tätigkeiten eines jeden Systemadministrators. Dazu gehört die Sicherung aller Dateien und oder der Datenbank. Nur so kann im Fehlerfall oder im Falle einer Portierung auf anderes System sichergestellt werden, dass das System zu einem definierten Zustand wiederhergestellt werden kann. Bei einer Magento Installation betrifft das neben allen Dateien und Verzeichnissen auch eine Kopie der MySQL Datenbank. Doch was nutzt das beste Backup wenn nicht sichergestellt werden kann, dass es im Notfall auch fehlerfrei wieder eingespielt werden kann?
InnoDB vs. MyISAM
Zum jetzigen Zeitpunkt unterstützt Magento das Datenbankmanagementsystem MySQL. Innerhalb von MySQL werden so genannte Storage Engines verwendet um die Daten auf Dateiebene zu organisieren. Im Moment kommen die beiden Storage Engines InnoDB und MyISAM zum Einsatz, wobei jede für sich Vor- und Nachteile besitzt.
InnoDB
Bei InnoDB handelt es sich um ein freies Speichersubsystem für MySQL, welches vor allem durch Transaktionssicherheit und referenzielle Integrität über Fremdschlüssel glänzt.
MyISAM
MyISAM zeichnet sich besonders durch hohe Effizienz aus und besitzt seit der MySQL 3.23 ein Volltextsuche.
Wie sich unschwer erkennen lässt, werden für Online Shops, wie Magento einer ist, Transaktionssicherheit benötigt, damit ein Einkauf entweder fehlerfrei und vollständig oder gar nicht ausgeführt wird.
Probleme beim Löschen und Wiederherstellen der Daten
Meist beginnt das Einspielen alter Daten mit dem löschen der bestehenden Tabellen einer Datenbank und hier tritt bereits der erste Stolperstein zu Tage. Aufgrund der referenziellen Integrität, also der Abhängigkeit der Datensätze innerhalb verschiedener Tabellen untereinander, erscheint beim löschen der Tabelle die folgende Meldung: „Cannot delete or update a parent row: a foreign key constraint fails“.
Entweder man wiederholt nun den Schritt so oft bis alle Tabellen gelöscht sind oder man löscht die Datenbank und legt sie Anschluss daran wieder an; was meist schneller geht.
Das gleiche Problem tritt, wenn man endlich alle Tabellen gelöscht hat, beim importieren der Daten erneut auf: „Cannot add or update a child row: a foreign key constraint fails“.
Ein funktionierendes Backup mit Hilfe von phpMyAdmin
Mit Hilfe von phpMyAdmin ist es ein leichtes eine Datensicherung der Magento Datenbank durchzuführen. Nachdem die Datenbank ausgewählt wurde, einfach auf Export klicken und der entsprechende Dialog erscheint. In den allermeisten Fällen sind auch keine Änderungen in den Export-Einstellungen vorzunehmen. Nicht so hier!
Der Trick lautet: Beim exportieren nicht die Quick-Einstellungen zu verwenden, sondern auf Benutzerdefiniert zu wechseln und „Format spezifische Einstellungen“ zu wählen. Hier den „Disable foreign key checks“ aktivieren. Es findet keine Prüfung statt!
Das ist in Ordnung, wenn wir davon ausgehen, dass wir eine funktionierende Datenbank exportieren und nur dann. Jetzt klappt es auch mit dem importieren.
Den MySQL Speicherauszug (Dump) manuell ändern
Wer allerdings zu spät bemerkt, dass er ein Export vorgenommen hat ohne den Foreign-Key-Check zu deaktivieren, der kann nachträglich die Datei ändern. Dazu die Datei im Editor öffnen und am Datei-Anfang die folgende Zeile Code einfügen:
SET FOREIGN_KEY_CHECKS=0;
Diese Direktie deaktiviert die InnoDB Prüfung beim importieren. Damit die Prüfung nachdem importieren wieder aktiviert wird, ist eine weitere Zeile Code am Ende der Dump-Datei notwendig:
SET FOREIGN_KEY_CHECKS=1;
Dies ist zwar nur ein kleiner Trick, aber der kann den Administratoren-Alltag um einiges vereinfachen.
Euer Chefkoch
Als Chefkoch arbeite ich als Systemadministrator und Programmierer. Hier blogge ich über Joomla, Magento, WordPress und Windows. In meiner Freizeit fotografiere ich viel, fahre mit meiner Yamaha XT660R oder Jogge durch die Gegend.