ข้อผิดพลาดขั้นตอนการย้ายข้อมูล Eav


11

ใครมีปัญหานี้

การย้ายข้อมูล> ขั้นตอน EAV

SQLSTATE [23000]: การละเมิดข้อ จำกัด ด้านความซื่อสัตย์: 1062 รายการที่ซ้ำกัน '1-Migration_Default' สำหรับคีย์ 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


คุณพบวิธีการแก้ปัญหานี้หรือไม่?
Gaurav Agrawal

คำตอบ:


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
ค่าใด? วิธีการลบแถว DB ที่ทำให้เกิดการละเมิดข้อ จำกัด ด้านความซื่อสัตย์? ดูที่ชื่อดัชนี ในกรณีของฉันมันคือ "URL_REWRITE_REQUEST_PATH_STORE_ID" ส่วนแรกของมันคือชื่อของตารางที่มีการบันทึกที่ละเมิด ในกรณีของฉันมันคือ url_rewrite (หรือมากกว่านั้นอย่างแม่นยำ my-prefix_url_rewrite) REQUEST_PATH และ STORE_ID เป็นสองคอลัมน์ที่เมื่อรวมกันจะต้องไม่ซ้ำกัน ในกรณีของฉันเครื่องมือย้ายข้อมูลพยายามแทรกสองระเบียนด้วย "home" ภายใต้ request_path และ 1 ภายใต้ store_id ฉันต้องลบอันแรก
Mateusz

@Mateusz ถ้าเราใช้คำสั่ง -r มันจะไม่รีเซ็ต db และเริ่มจากจุดเริ่มต้น? ทุกครั้งที่กู้คืน db นั้นใช้เวลาในการ
ประมวลผล

@jafarpinjar (หรือคนอื่นดูนี่) ใช่ว่าถูกต้อง คุณต้องกู้คืนฐานข้อมูลทุกครั้ง จากเอกสารของ Magento 2: "ในการบังคับให้ Data Migration Tool ทำงานตั้งแต่ต้นให้ใช้อาร์กิวเมนต์ --reset ในกรณีนี้เราขอแนะนำให้คุณกู้คืนฐานข้อมูล Magento 2 ของคุณเพื่อป้องกันการคัดลอกข้อมูลที่ย้ายไว้ก่อนหน้านี้"
WackGet

@Mateusz ฉันมีข้อผิดพลาดนี้ "การละเมิดข้อ จำกัด ของความซื่อสัตย์: 1062 รายการซ้ำ '0' สำหรับคีย์ 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

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

@ อัลเฟรโด Lanzetta ฉันได้ย้ายไปยัง M2 เรียบร้อยแล้ว แต่ดูเหมือนจะมีปัญหากับตัวเลือกรูปแบบที่กำหนดเอง ฉันต้องการข้อมูลเชิงลึกของคุณเกี่ยวกับสิ่งเดียวกัน คุณช่วยดูคำถามของฉันได้ไหม
CodeForGood

1

ในกรณีของฉันมันเกิดขึ้นกับฉันและฉันต้องนำเข้าสำเนาสำรองของฐานข้อมูล magento 2 ของฉันก่อนที่จะโหลดการโยกย้าย

ในกรณีของคุณ : คุณอาจต้องโหลดการย้ายข้อมูลซ้ำอีกครั้ง


สวัสดี @Kevin คำสั่งรีเซ็ตจะไม่รีเซ็ตการตั้งค่าหรือไม่ มันจะไม่เริ่มจากจุดเริ่มต้น? ทุกครั้งต้องรีเซ็ต db หรือไม่
jafar pinjar

@jafarpinjar (หรือคนอื่นดูนี่) ใช่ว่าถูกต้อง คุณต้องกู้คืนฐานข้อมูลทุกครั้ง จากเอกสารของ Magento 2: "ในการบังคับให้ Data Migration Tool ทำงานตั้งแต่ต้นให้ใช้อาร์กิวเมนต์ --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


คุณช่วยอธิบายได้ไหมว่าเหตุใดจึงทำให้เกิดความแตกต่างในการทำสำเนาคีย์หลัก
domdambrogia

0

จากประสบการณ์ของฉันมีการติดตั้งข้อมูลตัวอย่าง ดังนั้นฉันได้ทำตามขั้นตอนต่อไปนี้แล้ว

  1. ฉันลบฐานข้อมูล
  2. จากนั้นติดตั้ง magento 2 อีกครั้งโดยไม่มีข้อมูลตัวอย่าง

จากนั้นฉันสามารถโยกย้าย


0

แก้ไขปัญหาของฉันด้วย sql ต่อไปนี้:

การละเมิดข้อ จำกัด ด้านความสมบูรณ์: 1,062 รายการซ้ำ '4-Images' สำหรับคีย์ - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

ลองทำอะไรซักอย่าง

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.