数据迁移Eav步骤错误


Answers:


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

我面临着同样的问题,在哪里可以更改此值?
Purushotam Sharma

1
哪个值?如何删除导致完整性约束冲突的数据库行?查看索引名称。就我而言,它是“ URL_REWRITE_REQUEST_PATH_STORE_ID”。它的第一部分是带有违规记录的表的名称。就我而言,它是url_rewrite(或更确切地说是my-prefix_url_rewrite)。REQUEST_PATH和STORE_ID是两列,放在一起时必须是唯一的。在我的情况下,迁移工具试图在request_path下插入两个带有“ home”的记录,在store_id下插入两个带有“ home”的记录。我必须删除第一个。
Mateusz

@Mateusz,如果我们使用命令-r,它不会重置数据库并从头开始吗?每次恢复DB过一次服用PROCESSS
贾法尔pinjar

@jafarpinjar(或其他正在查看此内容的人)是的,这是正确的。您需要每次还原数据库。从Magento 2的文档中:“要强制从一开始就运行数据迁移工具,请使用--reset参数。在这种情况下,我们建议您还原Magento 2数据库转储,以防止复制以前迁移的数据。”
Wack在

@Mateusz,我遇到此错误,“违反完整性约束:1062项'
WISHLIST_CUSTOMER_ID

2

我找到了可以为我解决此问题的解决方案 https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

解决方案是将Magento 1数据库中eav_attribute_set表的“ attribute_value_name”字段中包含名称“ Default”的所有值重命名为“ Default_x”,然后从头开始进行迁移。

在我的情况下,有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,重设命令不会重设设置吗?它会不会从头开始?每次需要重置数据库?
贾法尔·品哈尔(Jafar Pinjar)

@jafarpinjar(或其他正在查看此内容的人)是的,这是正确的。您需要每次还原数据库。从Magento 2的文档中:“要强制从一开始就运行数据迁移工具,请使用--reset参数。在这种情况下,我们建议您还原Magento 2数据库转储,以防止复制以前迁移的数据。”
Wack在

1

要解决此问题,

  1. 首先,您需要检查已经迁移的属性集。
  2. 然后删除除默认属性集以外的那些属性集。

您可以通过SQL查询应用程序或界面来实现。

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

请仔细检查您要迁移的数据库Magento2。有时,我们没有在数据迁移工具中更改数据库名称。

重新安装新的Magento实例,并在数据迁移工具中正确添加数据库名称


0

数据迁移工具无法从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


您能解释一下为什么这会对复制主键有所不同吗?
domdambrogia

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';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.