Migrazione dei dati Errore passo Eav


11

Qualcuno ha questo problema?

migrazione dei dati> EAV Step

SQLSTATE [23000]: Violazione del vincolo di integrità: 1062 Voce duplicata '1-Migration_Default' per la chiave 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


Hai trovato una soluzione per questo?
Gaurav Agrawal,

Risposte:


4

Questo errore si verifica quando lo strumento di migrazione non riesce a trasferire i dati (ad esempio a causa di violazioni dell'integrità) senza eseguire il rollback e viene eseguito nuovamente. Tenta di creare il set di attributi "Migration_Default" e ha esito negativo, poiché è già presente nel database.

Quello che devi fare è:

1) Ripristina il tuo database Magento 2.0 da una copia che (spero) hai fatto prima di eseguire lo strumento di migrazione.

2) Eseguire di nuovo lo strumento di migrazione e verificare il primo errore in cui si è verificato l'errore. Nel mio caso era:

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

3) Risolvi il problema (ho dovuto rimuovere manualmente una riga nel DB).

Ripeti i passaggi fino a quando non hai eliminato tutti gli errori e vedi il messaggio dolce:

Migration completed

Sto affrontando lo stesso problema, dove posso modificare questo valore?
Purushotam Sharma,

1
Quale valore? Come rimuovere una riga DB che causa una violazione del vincolo di integrità? Guarda il nome dell'indice. Nel mio caso era "URL_REWRITE_REQUEST_PATH_STORE_ID". La prima parte di esso è il nome della tabella con il record offensivo. Nel mio caso era url_rewrite (o più precisamente my-prefix_url_rewrite). REQUEST_PATH e STORE_ID sono due colonne che quando messe insieme devono essere univoche. Nel mio caso lo strumento di migrazione stava cercando di inserire due record con "home" in request_path e 1 in store_id. Ho dovuto rimuovere il primo.
Mateusz,

@Mateusz, se usiamo il comando, -r non ripristinerà il db e inizierà dall'inizio? ogni volta che ripristinare db è troppo tempo per prendere i
processi

@jafarpinjar (o chiunque altro lo guardi) Sì, è corretto. È necessario ripristinare il database ogni volta. Dalla documentazione di Magento 2: "Per forzare l'esecuzione dello strumento di migrazione dei dati dall'inizio, utilizzare l'argomento --reset. In tal caso, si consiglia di ripristinare il dump del database Magento 2 per impedire la duplicazione dei dati precedentemente migrati."
Wack

@Mateusz, ho questo errore, "Violazione del vincolo di integrità: 1062 Voce duplicata '0' per la chiave 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

2

Ho trovato questa soluzione che ha risolto questo problema per me https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

La soluzione è quella di rinominare tutti i valori contenenti il ​​nome "Predefinito" nel campo "nome_attributo" della tabella eav_attribute_set in "Predefinito_x" nel database Magento 1 ed eseguire la migrazione da zero.

Nel mio caso, c'erano 9 record con il nome "Predefinito". Quindi li ho rinominati in Default_1 in Default_9 e ha funzionato perfettamente!


Grazie, ha funzionato anche per me. Successivamente ho riscontrato un relativo errore chiave duplicato e l'ho EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODErisolto con un approccio simile:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
Wack Ottieni il

@Alfredo Lanzetta, ho eseguito correttamente la migrazione a M2, ma sembra che si sia verificato un problema con l'opzione di layout personalizzata. Vorrei che le tue intuizioni sullo stesso. Potresti per favore dare un'occhiata alla mia domanda?
CodeForGood

1

Nel mio caso : è successo a me e ho dovuto importare un backup del mio database magento 2 prima di ricaricare la migrazione.

Nel tuo caso : forse hai dovuto ricaricare la migrazione dei dati una seconda volta.


ciao @Kevin, il comando reset non ripristina le impostazioni? non inizierà dall'inizio? ogni volta è necessario ripristinare il db?
jafar pinjar,

@jafarpinjar (o chiunque altro lo guardi) Sì, è corretto. È necessario ripristinare il database ogni volta. Dalla documentazione di Magento 2: "Per forzare l'esecuzione dello strumento di migrazione dei dati dall'inizio, utilizzare l'argomento --reset. In tal caso, si consiglia di ripristinare il dump del database Magento 2 per impedire la duplicazione dei dati precedentemente migrati."
Wack

1

Per risolvere questo problema,

  1. Innanzitutto è necessario verificare la presenza di set di attributi già migrati.
  2. Quindi eliminare i set di attributi tranne quello predefinito.

È possibile farlo tramite l'applicazione o l'interfaccia di query SQL.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Ricontrolla con il tuo database Magento di migrazione 2. A volte non abbiamo cambiato il nome del database nello strumento di migrazione dei dati.

Reinstalla la nuova istanza di Magento e aggiungi correttamente il nome del database nello strumento di migrazione dei dati


0

Data-Migration-Tool non riceve i dati dall'origine in utf8.
Ecco una semplice soluzione a questo problema:

Modificare: 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


Puoi spiegare perché questo farebbe la differenza nel duplicare una chiave primaria?
domdambrogia,

0

Nella mia esperienza, ci sono dati di esempio installati. Quindi, ho fatto i seguenti passi.

  1. Ho lasciato cadere il database
  2. Quindi reinstallare nuovamente Magento 2 senza dati di esempio.

Quindi, posso migrare.


0

Risolto il problema con il seguente sql:

Violazione del vincolo di integrità: 1062 Voce duplicata '4-Immagini' per chiave - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Quindi prova qualcosa

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.