In der letzen Wochen bin ich beim Einspielen eines Magento Datenbank Dumps nahezu verzweifelt. Der Plan war eigentlich „nur“ ein Backup des Shops einzuspielen, um so die schiefgegangenen Update-Versuche von Magento zu neutralisieren und den Shop wieder lauffähig zu bekommen.

Gesagt, getan. Allerdings mit wenig Erfolg. Das SQL-Backup-Skript mit allen Datenbanktabellen und -inhalten sollte einfach nur über PHPMyAdmin eingespielt werden, so dass die Datenbank auf dem gewünschten Stand ist. Bei der Ausführung der diveresen SQL-Statements kam es allerdings zu folgendem Fehler.

#1452 - Cannot add or update a child row: a foreign key constraint fails (`xxx`.<result 2 when explaining filename '#sql-178c_4d'>, CONSTRAINT `FK_CUSTOMER_EAV_ATTRIBUTE_ID` FOREIGN KEY (`attribute_id`) REFERENCES `eav_attribute` (`attribute_id`) ON DELETE )

Bei genauer Betrachtung der Fehlermeldung fiel auf, dass es Probleme zwischen den Fremdschlüssel-Verbindungen einzelner Tabellen gibt. Das Problem tritt auf, wenn in z.B. Tabelle A ein Datensatz eingefügt werden soll, der auf Tabelle B verweist, aber in Tabelle B (noch) nicht existiert. Somit zeigt der Datensatz „ins Leere“.

Damit beim Importieren einer Backup-Datei diese Überprüfung auf vorhandene Datensätze nicht durchgeführt wird und das Problem des gescheiterten Imports gelöst wird, sollte die SQL-Backup-Datei zu Beginn mit folgenden Anweisungen erweitert werden:

SET AUTOCOMMIT=0;
SET FOREIGN_KEY_CHECKS=0; 

Am Ende der Backup-Datei sollte folgende Anweisung eingefügt werden:

SET FOREIGN_KEY_CHECKS=1;
COMMIT;
SET AUTOCOMMIT=1; 

Diese Anweisungen bewirken, dass für den Zeitraum des Datenbankimport die Constraints nicht auf ihre Gültigkeit geprüft werden und somit „stumpf“ alle Daten importiert werden.