MySQL-Fehler beim Importieren der Datenbank

7

Ich möchte Magento aktualisieren. Daher möchte ich zunächst das Live-Produktionssystem in einen Entwicklungsarbeitsbereich übertragen. Ich versuche, die Produktionsdatenbank in eine saubere Datenbank zu importieren. Aber ich kann es nicht richtig importieren. Ich habe verschiedene Optionen ausprobiert: Exportieren über Magento admin, Exportieren über phpMyAdmin mit verschiedenen Einstellungen, einschließlich (und ausschließlich) der Anweisungen unter http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/restoring_a_backup_of_a_magento_database

Ich verwende Magento 1.5.1.0, phpMyAdmin 4.0.8 und die neueste Version von BigDump zum Importieren.

Dies ist der Fehler, den ich nach einer Weile erhalte:

Fehler in der Zeile 8699: ADD CONSTRAINT FK_CATALOG_CATEGORY_ENTITY_DATETIME_STOREFOREIGN KEY ( store_id) REFERENCES mage_core_store( store_id) ON DELETE CASCADE ON UPDATE CASCADE; Abfrage: ALTER TABLE mage_catalog_category_entity_datetime ADD CONSTRAINT FK_CATALOG_CATEGORY_ENTITY_DATETIME_ATTRIBUTEFOREIGN KEY ( attribute_id) LITERATUR mage_eav_attribute( attribute_id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT FK_CATALOG_CATEGORY_ENTITY_DATETIME_ENTITYFOREIGN KEY ( entity_id) LITERATUR mage_catalog_category_entity( entity_id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT FK_CATALOG_CATEGORY_ENTITY_DATETIME_STOREFOREIGN KEY ( store_id) LITERATUR mage_core_store( store_id) ON DELETE CASCADE ON UPDATE CASCADE MySQL: Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl ( goldenm101_mage4. #sql-182e_c1d79, CONSTRAINT FK_CATALOG_CATEGORY_ENTITY_DATETIME_STOREFOREIGN KEY ( store_id) REFERENCES mage_core_store( store_id) ON DELETE CASCADE ON UPDATE CASC) '

Zusätzliche Informationen: Ich habe keinen SSH-Zugriff.

Fehler nach der möglichen Lösung von mageUz:

Fehler in der Zeile 1487637: ADD CONSTRAINT FK_catalogrule_product_websiteFOREIGN KEY ( website_id) REFERENCES mage_core_website( website_id) ON DELETE CASCADE ON UPDATE CASCADE; Abfrage: - - ALTER TABLE mage_catalogrule_product ADD CONSTRAINT FK_catalogrule_product_customergroupFOREIGN KEY ( customer_group_id) LITERATUR mage_customer_group( customer_group_id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT FK_CATALOGRULE_PRODUCT_PRODUCTFOREIGN KEY ( product_id) LITERATUR mage_catalog_product_entity( entity_id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT FK_catalogrule_product_ruleFOREIGN KEY ( rule_id) LITERATUR mage_catalogrule( rule_id) ON CASCADE BEI ​​UPDATE CASCADE LÖSCHEN, CONSTRAINT FK_catalogrule_product_websiteFOREIGN KEY ( website_id) HINZUFÜGEN REFERENZEN mage_core_website( website_id) ON CASCADE BEI ​​UPDATE CASCADE LÖSCHEN MySQL: Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl ( goldenm101_mage4.#sql-182e_308afa, CONSTRAINT FK_catalogrule_product_customergroupFOREIGN KEY ( customer_group_id) REFERENZEN mage_customer_group( customer_group_id) AUF DELETE CASC)

PeterPayn
quelle
Probieren Sie magerun aus: github.com/netz98/n98-magerun#dump-database
Thorsten

Antworten:

11

Dies liegt daran, dass Ihre Datenbank eine Fremdschlüsseleinschränkung aufweist. Befolgen Sie vor dem Import die folgenden Schritte

1) Öffnen Sie die exportierte SQL-Datei Ihrer Datenbank und fügen Sie zu Beginn die folgende SQL-Abfrage hinzu

SET FOREIGN_KEY_CHECKS = 0;

2) Zum Ende der Datei gehen und hinzufügen

SET FOREIGN_KEY_CHECKS = 1;

Das sollte funktionieren. Die Fremdschlüsselprüfung wird beim Importieren deaktiviert und anschließend wieder aktiviert.

Dexter
quelle
1
Vielen Dank für Ihren Kommentar. Wenn dies die Lösung war, hätte sie bereits funktionieren sollen, da ich diese Anweisungen bereits hinzugefügt habe (wie durch den Link in meinem Beitrag gezeigt). Ein Datenbankexport über den Magento-Administrator fügt sie automatisch hinzu.
PeterPayn
2

Haben Sie SSH-Zugang? Wenn ja, versuchen Sie die folgenden Befehle (wobei Sie sie durch magentodbden Namen Ihrer Datenbank ersetzen sollten ):

mysqldump -u root -p magentodb > magentodb.sql
mysqldump -u root -p magentodb | gzip -v > magentodb.sql.gz

Mit dem zweiten Befehl wird die Datenbank sofort komprimiert. Dies kann hilfreich sein, wenn Sie sie herunterladen müssen. Wenn Sie keinen MySQL-Root-Zugriff haben, verwenden Sie ein anderes Konto.

Entpacken Sie die Datenbank auf dem Testcomputer und führen Sie den folgenden Befehl aus:

mysql -u root -p test_magentodb < magentodb.sql

Dies ist meine bevorzugte Methode. Unsere Datenbank ist 2 GB groß, und die anderen Methoden schlagen bei einer so großen Datenbank einfach fehl.

SPRBRN
quelle
Vielen Dank für Ihren Kommentar, obwohl ich leider keinen SSH-Zugang habe.
PeterPayn
Können Sie ein PHP-Skript ausführen, das einen Shell-Befehl ausführen kann? Sie können dies mit einer kleinen Testdatenbank testen. Wenn dies funktioniert, können Sie es mit der Magento-Datenbank versuchen.
SPRBRN
1
Ich habe meine phpinfo.php überprüft und es heißt, dass shell_exec eine deaktivierte Funktion ist. Wenn das Ihre Frage beantwortet.
PeterPayn
Dies funktionierte einwandfrei, als ich es zum ersten Mal versuchte. Vielen Dank! Mit phpMyAdmin Export konnte ich die Datenbank nach vielen Versuchen und mehreren Stunden nicht kopieren.
Daniel Flippance
2

Es scheint, dass die Tabelle mage_core_store etwas anders importiert wurde. Ich habe dieses Problem auch mehrmals festgestellt, als ich magento db importiert / migriert habe. Die ersten Zeilen einiger Tabellen (core_store, core_website, core_store_group, customer_group) werden mit anderen Primärschlüsseln als mit dem Original importiert.

Lösungen:

SET FOREIGN_KEY_CHECKS = 0;Dump verwenden und importieren.

Führen Sie die Abfrage aus:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
mageUz
quelle
Ich bin mir nicht sicher, ob ich verstehe, was Sie sagen wollen. Meinen Sie: Exportieren, bearbeiten Sie die SQL-Datei und fügen Sie (nur) die Zeile "Fremdschlüsselprüfung" hinzu, ohne sie am Ende der Datei wieder einzuschalten. Und wenn es importiert wird, führen Sie diese Abfrage aus?
PeterPayn
@PetePayn, Führen Sie die Abfrage nach erfolgreichem Import Ihrer
Datenbank
Also habe ich die einzelne Zeile einem Export über phpMyAdmin (mit Vim) hinzugefügt und sie mit bigdump in eine neue Datenbank importiert. Es war bei ungefähr 94% und dann erhielt ich einen weiteren Fehler: Ich habe den Fehler zur Hauptfrage hinzugefügt.
PeterPayn
Versuchen Sie, nur die Datenbankstruktur ohne Daten zu importieren / exportieren. Wenn die Struktur importiert werden könnte, können Sie versuchen, Daten zu importieren.
MagierUz