Ошибка переноса данных в Eav


11

У кого-нибудь есть эта проблема?

миграция данных> EAV Step

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись '1-Migration_Default' для ключа 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


Вы нашли какое-нибудь решение для этого?
Гаурав Агравал

Ответы:


4

Эта ошибка возникает, когда инструменту миграции не удается передать данные (например, из-за нарушений целостности) без отката, и он запускается снова. Он пытается создать набор атрибутов "Migration_Default" и завершается неудачно, поскольку он уже присутствует в базе данных.

Что вам нужно сделать, это:

1) Восстановите базу данных Magento 2.0 из копии, которую вы (надеюсь) сделали перед запуском инструмента миграции.

2) Снова запустите инструмент миграции и проверьте, не произошла ли первая ошибка. В моем случае это было:

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

3) Исправить проблему (пришлось вручную удалить строку в БД).

Повторите шаги, пока вы не очистите все ошибки и не увидите приятное звучание сообщения:

Migration completed

Я сталкиваюсь с той же проблемой, где я могу изменить это значение?
Пурушотам Шарма

1
Какое значение? Как удалить строку БД, которая вызывает нарушение ограничения целостности? Посмотрите на название индекса. В моем случае это было "URL_REWRITE_REQUEST_PATH_STORE_ID". Первая часть - это имя таблицы с ошибочной записью. В моем случае это был url_rewrite (или, точнее, my-prefix_url_rewrite). REQUEST_PATH и STORE_ID - это два столбца, которые при объединении должны быть уникальными. В моем случае инструмент миграции пытался вставить две записи с «home» в request_path и 1 в store_id. Я должен был удалить первый.
Матеуш

@Mateusz, если мы используем команду, -r не сбросит БД и не начнет с начала? каждый раз, когда восстановление БД - это слишком длительный процесс
Джафар Пинджар

@jafarpinjar (или кто-либо еще, смотрящий на это) Да, это правильно. Вам нужно восстанавливать базу данных каждый раз. Из документации Magento 2: «Чтобы принудительно запустить инструмент переноса данных, используйте аргумент --reset. В этом случае мы рекомендуем вам восстановить дамп базы данных Magento 2, чтобы избежать дублирования ранее перенесенных данных».
WackGet

@Mateusz, у меня есть эта ошибка, "Нарушение ограничения целостности: 1062 Дублирующая запись '0' для ключа 'WISHLIST_CUSTOMER_ID'"
Джафар Пинджар

2

Я нашел это решение, которое решило эту проблему для меня https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

Решение состоит в том, чтобы переименовать все значения, содержащие имя «Default» в поле «attribute_value_name» таблицы eav_attribute_set, в «Default_x» в базе данных Magento 1 и запустить миграцию с нуля.

В моем случае было 9 записей с именем «По умолчанию». Поэтому я переименовал их в Default_1 в Default_9, и это сработало отлично!


Спасибо, это сработало и для меня. Затем я получил связанную ошибку дублированного ключа EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODEи решил ее с помощью аналогичного подхода:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@Alfredo Lanzetta, я успешно перешел на M2, но, похоже, у меня проблема с пользовательским макетом. Я хотел бы, чтобы ваши идеи о том же. Не могли бы вы взглянуть на мой вопрос?
CodeForGood

1

В моем случае : это случилось со мной, и мне пришлось импортировать резервную копию моей базы данных magento 2 перед перезагрузкой миграции.

В вашем случае : возможно, вам пришлось перезагрузить миграцию данных во второй раз.


привет @Kevin, команда сброса не сбрасывает настройки? это не начнется с начала? каждый раз нужно сбрасывать дб?
Джафар Пинджар

@jafarpinjar (или кто-либо еще, смотрящий на это) Да, это правильно. Вам нужно восстанавливать базу данных каждый раз. Из документации Magento 2: «Чтобы принудительно запустить инструмент переноса данных, используйте аргумент --reset. В этом случае мы рекомендуем вам восстановить дамп базы данных Magento 2, чтобы избежать дублирования ранее перенесенных данных».
WackGet

1

Чтобы исправить эту проблему,

  1. Сначала вам нужно проверить уже перенесенные наборы атрибутов.
  2. Затем удалите эти наборы атрибутов, кроме набора по умолчанию.

Вы можете сделать это через приложение или интерфейс SQL-запросов.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Дважды проверьте с вашей миграцией базы данных Magento 2. Иногда мы не меняли имя базы данных в инструменте миграции данных.

Переустановите свежий экземпляр Magento и правильно добавьте имя базы данных в инструмент переноса данных.


0

Data-Migration-Tool не получает данные из источника в utf8.
Вот простое решение этой проблемы:

Редактировать: 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


Можете ли вы объяснить, почему это будет иметь значение при дублировании первичного ключа?
Домдамброджия

0

По моему опыту, здесь установлены образцы данных. Итак, я сделал следующие шаги.

  1. Я сбросил базу данных
  2. Затем переустановите magento 2 снова без образцов данных.

Тогда я могу мигрировать.


0

Исправлена ​​моя проблема со следующим sql:

Нарушение ограничения целостности: 1062 Повторяющаяся запись «4-изображения» для ключа - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Так попробуй что нибудь

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.