Datenmigration Eav-Schrittfehler


11

Hat jemand dieses Problem?

Datenmigration> EAV-Schritt

SQLSTATE [23000]: Verletzung der Integritätsbedingung: 1062 Doppelter Eintrag '1-Migration_Default' für Schlüssel 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


Haben Sie eine Lösung dafür gefunden?
Gaurav Agrawal

Antworten:


4

Dieser Fehler tritt auf, wenn das Migrationstool keine Daten überträgt (z. B. aufgrund von Integritätsverletzungen), ohne ein Rollback durchzuführen, und erneut ausgeführt wird. Es wird versucht, den Attributsatz "Migration_Default" zu erstellen, und dies schlägt fehl, da er bereits in der Datenbank vorhanden ist.

Was Sie tun müssen, ist:

1) Stellen Sie Ihre Magento 2.0-Datenbank von einer Kopie wieder her, die Sie (hoffentlich) vor dem Ausführen des Migrationstools erstellt haben.

2) Führen Sie das Migrationstool erneut aus und suchen Sie nach dem ersten Fehler, bei dem es fehlschlägt. In meinem Fall war es:

[PDOException]                                                                                                              
  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'home-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID'

3) Beheben Sie das Problem (ich musste eine Zeile in der Datenbank manuell entfernen).

Wiederholen Sie die Schritte, bis Sie alle Fehler behoben haben und die süß klingende Meldung sehen:

Migration completed

Ich stehe vor dem gleichen Problem: Wo kann ich diesen Wert ändern?
Purushotam Sharma

1
Welcher Wert? Wie entferne ich eine DB-Zeile, die eine Verletzung der Integritätsbeschränkung verursacht? Schauen Sie sich den Indexnamen an. In meinem Fall war es "URL_REWRITE_REQUEST_PATH_STORE_ID". Der erste Teil davon ist der Name der Tabelle mit dem fehlerhaften Datensatz. In meinem Fall war es url_rewrite (oder genauer my-prefix_url_rewrite). REQUEST_PATH und STORE_ID sind zwei Spalten, die zusammen eindeutig sein müssen. In meinem Fall hat das Migrationstool versucht, zwei Datensätze mit "home" unter request_path und 1 unter store_id einzufügen. Ich musste den ersten entfernen.
Mateusz

@Mateusz, wenn wir den Befehl verwenden, -r wird die Datenbank nicht zurückgesetzt und von vorne begonnen? Jedes Mal, wenn die Wiederherstellung von DB zu zeitaufwändig ist
Jafar Pinjar

@jafarpinjar (oder jemand anderes, der sich das ansieht) Ja, das ist richtig. Sie müssen die Datenbank jedes Mal wiederherstellen. Aus der Dokumentation zu Magento 2: "Um die Ausführung des Datenmigrationstools von Anfang an zu erzwingen, verwenden Sie das Argument --reset. In diesem Fall empfehlen wir, den Magento 2-Datenbankspeicherauszug wiederherzustellen, um das Duplizieren zuvor migrierter Daten zu verhindern."
WackGet

@Mateusz, ich habe den Fehler "Verletzung der Integritätsbeschränkung: 1062 Doppelter Eintrag '0' für Schlüssel 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

2

Ich habe diese Lösung gefunden, die dieses Problem für mich gelöst hat: https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

Die Lösung besteht darin, alle Werte, die den Namen "Standard" im Feld "attribute_value_name" der Tabelle eav_attribute_set enthalten, in "Default_x" in der Magento 1-Datenbank umzubenennen und die Migration von Grund auf neu auszuführen.

In meinem Fall gab es 9 Datensätze mit dem Namen "Standard". Also habe ich sie in Default_1 in Default_9 umbenannt und es hat perfekt funktioniert!


Danke, das hat auch bei mir funktioniert. Als nächstes bekam ich einen verwandten doppelten Schlüsselfehler EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODEund löste diesen durch einen ähnlichen Ansatz:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@ Alfredo Lanzetta, ich bin erfolgreich auf M2 migriert, habe aber anscheinend ein Problem mit der benutzerdefinierten Layoutoption. Ich hätte gerne Ihre Erkenntnisse darüber. Könnten Sie sich bitte meine Frage ansehen?
CodeForGood

1

In meinem Fall : Es ist mir passiert und ich musste ein Backup meiner Magento 2-Datenbank importieren, bevor ich die Migration neu laden konnte.

In Ihrem Fall : Möglicherweise mussten Sie die Datenmigration ein zweites Mal neu laden.


Hallo @ Kevin, Reset-Befehl setzt die Einstellungen nicht zurück? es wird nicht von vorne beginnen? jedes mal die db zurücksetzen müssen?
Jafar Pinjar

@jafarpinjar (oder jemand anderes, der sich das ansieht) Ja, das ist richtig. Sie müssen die Datenbank jedes Mal wiederherstellen. Aus der Dokumentation zu Magento 2: "Um die Ausführung des Datenmigrationstools von Anfang an zu erzwingen, verwenden Sie das Argument --reset. In diesem Fall empfehlen wir, den Magento 2-Datenbankspeicherauszug wiederherzustellen, um das Duplizieren zuvor migrierter Daten zu verhindern."
WackGet

1

Um dieses Problem zu beheben,

  1. Zuerst müssen Sie nach bereits migrierten Attributgruppen suchen.
  2. Löschen Sie dann diese Attributgruppen mit Ausnahme der Standardattribute.

Sie können dies über Ihre SQL-Abfrageanwendung oder -schnittstelle tun.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Überprüfen Sie dies mit Ihrer migrierenden Datenbank Magento 2. Manchmal haben wir den Datenbanknamen im Datenmigrationstool nicht geändert.

Installieren Sie die neue Magento-Instanz neu und fügen Sie den Datenbanknamen im Datenmigrationstool korrekt hinzu


0

Das Data-Migration-Tool empfängt in utf8 keine Daten von der Quelle.
Hier ist eine einfache Lösung für dieses Problem:

Bearbeiten: vendor/magento/data-migration-tool/src/Migration/ResourceModel/Adapter/Mysql.php

public function __construct(
    \Magento\Framework\DB\Adapter\Pdo\MysqlFactory $adapterFactory,
    \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory,
    array $config
) {
    $config['initStatements'] = 'SET NAMES utf8'; // +
    $configData['config'] = $config;
    $this->resourceAdapter = $adapterFactory->create($configData);
    $this->setForeignKeyChecks(0);
    $this->triggerFactory = $triggerFactory;
}

GitHub


Können Sie erklären, warum dies beim Duplizieren eines Primärschlüssels einen Unterschied macht?
Domdambrogia

0

Nach meiner Erfahrung sind Beispieldaten installiert. Also habe ich die folgenden Schritte gemacht.

  1. Ich habe die Datenbank gelöscht
  2. Installieren Sie dann Magento 2 erneut ohne Beispieldaten.

Dann kann ich migrieren.


0

Mein Problem mit folgendem SQL wurde behoben:

Verletzung der Integritätsbeschränkung: 1062 Doppelter Eintrag '4-Images' für Schlüssel - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Also probieren Sie etwas aus

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.