Erreur de l'étape Eav de la migration des données


11

Quelqu'un a ce problème?

migration des données> EAV Step

SQLSTATE [23000]: violation de contrainte d'intégrité: 1062 entrée en double «1-Migration_Default» pour la clé «EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME»


Avez-vous trouvé une solution à cela?
Gaurav Agrawal

Réponses:


4

Cette erreur se produit lorsque l'outil de migration ne parvient pas à transférer des données (par exemple en raison de violations d'intégrité) sans annuler, et est exécuté à nouveau. Il tente de créer le jeu d'attributs "Migration_Default" et échoue, car il est déjà présent dans la base de données.

Ce que vous devez faire, c'est:

1) Restaurez votre base de données Magento 2.0 à partir d'une copie que vous avez (espérons-le) faite avant d'exécuter l'outil de migration.

2) Réexécutez l'outil de migration et recherchez la première erreur sur laquelle il échoue. Dans mon cas, c'était:

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

3) Résoudre le problème (j'ai dû supprimer manuellement une ligne dans la base de données).

Répétez les étapes jusqu'à ce que vous ayez effacé toutes les erreurs et que le message au son doux soit visible:

Migration completed

Je suis confronté au même problème, où puis-je modifier cette valeur?
Purushotam Sharma

1
Quelle valeur? Comment supprimer une ligne de base de données qui provoque une violation de contrainte d'intégrité? Regardez le nom de l'index. Dans mon cas, c'était "URL_REWRITE_REQUEST_PATH_STORE_ID". La première partie est le nom de la table avec l'enregistrement incriminé. Dans mon cas, c'était url_rewrite (ou plus précisément my-prefix_url_rewrite). REQUEST_PATH et STORE_ID sont deux colonnes qui, une fois assemblées, doivent être uniques. Dans mon cas, l'outil de migration essayait d'insérer deux enregistrements avec "home" sous request_path et 1 sous store_id. J'ai dû retirer le premier.
Mateusz

@Mateusz, si nous utilisons la commande, -r cela ne réinitialisera pas la base de données et ne recommencera pas depuis le début? chaque fois que restaurer db est trop de temps à prendre des processus
jafar pinjar

@jafarpinjar (ou toute autre personne qui regarde cela) Oui, c'est correct. Vous devez restaurer la base de données à chaque fois. Dans la documentation de Magento 2: "Pour forcer l'outil de migration de données à s'exécuter depuis le début, utilisez l'argument --reset. Dans ce cas, nous vous recommandons de restaurer votre vidage de base de données Magento 2 pour éviter la duplication des données précédemment migrées."
WackGet

@Mateusz, j'ai cette erreur, "Violation de contrainte d'intégrité: 1062 Entrée en double '0' pour la clé 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

2

J'ai trouvé cette solution qui a résolu ce problème pour moi https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

La solution consiste à renommer toutes les valeurs contenant le nom "Default" dans le champ "attribute_value_name" de la table eav_attribute_set en "Default_x" dans la base de données Magento 1 et à exécuter la migration à partir de zéro.

Dans mon cas, il y avait 9 enregistrements avec le nom "Default". Je les ai donc renommés Default_1 en Default_9 et cela a parfaitement fonctionné!


Merci, cela a aussi fonctionné pour moi. Ensuite, j'ai eu une erreur de clé en double associée et j'ai EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODErésolu cela par une approche similaire:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@Alfredo Lanzetta, j'ai migré avec succès vers M2, mais je semble avoir un problème avec l'option de mise en page personnalisée. J'aimerais avoir vos idées sur le même sujet. Pourriez-vous s'il vous plaît jeter un oeil à ma question?
CodeForGood

1

Dans mon cas : cela m'est arrivé et j'ai dû importer une sauvegarde de ma base de données magento 2 avant de recharger la migration.

Dans votre cas : vous avez peut-être dû recharger la migration des données une deuxième fois.


salut @Kevin, la commande de réinitialisation ne réinitialisera pas les paramètres? ça ne commencera pas du début? à chaque fois besoin de réinitialiser la base de données?
jafar pinjar

@jafarpinjar (ou toute autre personne qui regarde cela) Oui, c'est correct. Vous devez restaurer la base de données à chaque fois. Dans la documentation de Magento 2: "Pour forcer l'outil de migration de données à s'exécuter depuis le début, utilisez l'argument --reset. Dans ce cas, nous vous recommandons de restaurer votre vidage de base de données Magento 2 pour éviter la duplication des données précédemment migrées."
WackGet

1

Pour résoudre ce problème,

  1. Vous devez d'abord vérifier les jeux d'attributs déjà migrés.
  2. Supprimez ensuite ces jeux d'attributs, sauf celui par défaut.

Vous pouvez le faire via votre application ou interface de requête SQL.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Vérifiez avec votre base de données de migration Magento 2. Parfois, nous n'avons pas modifié le nom de la base de données dans l'outil de migration de données.

Réinstallez une nouvelle instance de Magento et ajoutez correctement le nom de la base de données dans l'outil de migration des données


0

Data-Migration-Tool ne reçoit pas de données de la source dans utf8.
Voici une solution simple à ce problème:

Éditer: 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


Pouvez-vous expliquer pourquoi cela ferait une différence lors de la duplication d'une clé primaire?
domdambrogia

0

D'après mon expérience, des exemples de données sont installés. J'ai donc fait les étapes suivantes.

  1. J'ai laissé tomber la base de données
  2. Réinstallez ensuite magento 2 sans échantillon de données.

Ensuite, je peux migrer.


0

Correction de mon problème avec sql suivant:

Violation de contrainte d'intégrité: 1062 Entrée en double «4 images» pour la clé - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Alors essayez quelque chose

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.