Migrasi data Kesalahan langkah Eav


11

Adakah yang mengalami masalah ini?

migrasi data> EAV Langkah

SQLSTATE [23000]: Pelanggaran batasan integritas: 1062 Entri duplikat '1-Migration_Default' untuk kunci 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


Sudahkah Anda menemukan solusi untuk ini?
Gaurav Agrawal

Jawaban:


4

Kesalahan ini terjadi ketika alat migrasi gagal mentransfer data (mis. Karena pelanggaran integritas) tanpa memutar kembali, dan dijalankan kembali. Itu mencoba untuk membuat set atribut "Migration_Default" dan gagal, karena sudah ada dalam database.

Yang harus Anda lakukan adalah:

1) Kembalikan database Magento 2.0 Anda dari salinan yang (semoga) Anda buat sebelum menjalankan alat migrasi.

2) Jalankan alat migrasi lagi dan periksa kesalahan pertama yang gagal. Dalam kasus saya itu adalah:

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

3) Perbaiki masalah (saya harus menghapus baris di DB secara manual).

Ulangi langkah-langkah sampai Anda menyelesaikan semua kesalahan dan melihat pesan yang terdengar manis:

Migration completed

Saya menghadapi masalah yang sama, Di mana saya dapat mengubah nilai ini?
Purushotam Sharma

1
Nilai yang mana? Bagaimana menghapus baris DB yang menyebabkan pelanggaran batasan integritas? Lihatlah nama indeksnya. Dalam kasus saya itu adalah "URL_REWRITE_REQUEST_PATH_STORE_ID". Bagian pertama dari itu adalah nama tabel dengan catatan yang menyinggung. Dalam kasus saya itu adalah url_rewrite (atau lebih tepatnya my-prefix_url_rewrite). REQUEST_PATH dan STORE_ID adalah dua kolom yang bila disatukan harus unik. Dalam kasus saya, alat migrasi mencoba menyisipkan dua catatan dengan "rumah" di bawah request_path dan 1 di bawah store_id. Saya harus menghapus yang pertama.
Mateusz

@ Mateusz, jika kita menggunakan perintah, -r itu tidak akan mengatur ulang db dan mulai dari awal? setiap kali memulihkan db adalah proses yang terlalu memakan waktu
jafar pinjar

@jafarpinjar (atau siapa pun yang melihat ini) Ya itu benar. Anda harus mengembalikan database setiap kali. Dari dokumentasi Magento 2: "Untuk memaksa Alat Migrasi Data agar berjalan dari awal, gunakan argumen --reset. Dalam hal itu, kami sarankan Anda mengembalikan dump database Magento 2 Anda untuk mencegah duplikasi data yang sebelumnya dimigrasi."
WackGet

@Mususz, saya mengalami kesalahan ini, "Pelanggaran batasan integritas: 1062 Entri duplikat '0' untuk kunci 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

2

Saya menemukan solusi ini yang memecahkan masalah ini untuk saya https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

Solusinya adalah mengubah nama semua nilai yang mengandung nama "Default" di bidang "attribute_value_name" pada tabel eav_attribute_set menjadi "Default_x" di database Magento 1 dan menjalankan migrasi dari awal.

Dalam kasus saya, ada 9 catatan dengan nama "Default". Jadi saya mengganti nama mereka menjadi Default_1 ke Default_9 dan itu bekerja dengan sempurna!


Terima kasih, ini berhasil juga untuk saya. Selanjutnya saya mendapat kesalahan kunci duplikat terkait EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODE, dan diselesaikan dengan pendekatan yang serupa:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@ Alfredo Lanzetta, saya telah berhasil bermigrasi ke M2, tetapi tampaknya memiliki masalah dengan opsi tata letak khusus. Saya ingin wawasan Anda tentang hal yang sama. Bisakah Anda melihat pertanyaan saya?
CodeForGood

1

Dalam kasus saya : Itu terjadi pada saya dan saya harus mengimpor cadangan dari basis data magento 2 saya sebelum memuat ulang migrasi.

Dalam kasus Anda : Mungkin Anda harus memuat ulang migrasi data untuk kedua kalinya.


hai @Kevin, perintah reset tidak akan mengatur ulang pengaturan? itu tidak akan mulai dari awal? setiap kali perlu mengatur ulang db?
jafar pinjar

@jafarpinjar (atau siapa pun yang melihat ini) Ya itu benar. Anda harus mengembalikan database setiap kali. Dari dokumentasi Magento 2: "Untuk memaksa Alat Migrasi Data agar berjalan dari awal, gunakan argumen --reset. Dalam hal itu, kami sarankan Anda mengembalikan dump database Magento 2 Anda untuk mencegah duplikasi data yang sebelumnya dimigrasi."
WackGet

1

Untuk memperbaiki masalah ini,

  1. Pertama, Anda perlu memeriksa set atribut yang sudah dimigrasi.
  2. Kemudian hapus set atribut itu kecuali yang standar.

Anda dapat melakukannya melalui aplikasi atau antarmuka SQL querying Anda.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Periksa ulang dengan migrasi Database Magento Anda 2. Terkadang Kami tidak mengubah nama database dalam alat migrasi data.

Instal ulang instance Magento segar dan tambahkan nama database dengan benar dalam alat migrasi data


0

Migrasi Data-Alat tidak menerima data dari sumber di utf8.
Berikut ini adalah solusi sederhana untuk masalah ini:

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


Bisakah Anda menjelaskan mengapa ini akan membuat perbedaan dalam menduplikasi kunci utama?
domdambrogia

0

Dalam pengalaman saya, ada sampel data yang diinstal. Jadi, saya sudah melakukan langkah-langkah berikut.

  1. Saya menjatuhkan database
  2. Kemudian instal ulang magento 2 lagi tanpa data sampel.

Lalu, saya bisa bermigrasi.


0

Memperbaiki masalah saya dengan sql berikut:

Pelanggaran batasan integritas: 1062 Entri duplikat '4-Gambar' untuk kunci - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Jadi cobalah sesuatu

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.