Veri taşıma Eav adımı hatası


11

Bu sorunu yaşayan var mı?

veri taşıma> EAV Adımı

SQLSTATE [23000]: Bütünlük kısıtlaması ihlali: 1062 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME' anahtarı için '1-Migration_Default' yinelenen girişi


Bunun için bir çözüm buldunuz mu?
Gaurav Agrawal

Yanıtlar:


4

Bu hata, taşıma aracı geri alınmadan veri aktarmadığında (örn. Bütünlük ihlallerinden dolayı) oluşur ve tekrar çalıştırılır. Veritabanında zaten bulunduğundan "Migration_Default" öznitelik kümesi oluşturmaya çalışır ve başarısız olur.

Yapmanız gereken:

1) Magento 2.0 veritabanınızı, taşıma aracını çalıştırmadan önce (umarım) oluşturduğunuz bir kopyadan geri yükleyin.

2) Taşıma aracını tekrar çalıştırın ve başarısız olduğu ilk hatayı kontrol edin. Benim durumumda:

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

3) Sorunu düzeltin (DB'deki bir satırı manuel olarak kaldırmak zorunda kaldım).

Tüm hataları silene ve tatlı sondaj mesajını görene kadar adımları tekrarlayın:

Migration completed

Aynı sorunu yaşıyorum, bu değeri nerede değiştirebilirim?
Purushotam Sharma

1
Hangi değer? Bir bütünlük kısıtlaması ihlaline neden olan bir DB satırı nasıl kaldırılır? Dizin adına bakın. Benim durumumda "URL_REWRITE_REQUEST_PATH_STORE_ID" idi. İlk kısmı, rahatsız edici kaydı olan tablonun adıdır. Benim durumumda url_rewrite (ya da daha doğrusu benim prefix_url_rewrite) idi. REQUEST_PATH ve STORE_ID, bir araya getirildiğinde benzersiz olması gereken iki sütundur. Benim durumumda, geçiş aracı request_path altında "home" ve store_id altında 1 olan iki kayıt eklemeye çalışıyordu. İlkini kaldırmak zorunda kaldım.
Mateusz

@Mateusz, komut kullanırsak, -r db'yi sıfırlamaz ve baştan başlamaz mı? db geri her zaman çok zaman alma
süreçleri olduğunu

@jafarpinjar (veya buna bakan başka biri) Evet, doğru. Her seferinde veritabanını geri yüklemeniz gerekir. Magento 2'nin belgelerinden: "Veri Taşıma Aracı'nı en başından çalışmaya zorlamak için --reset bağımsız değişkenini kullanın. Bu durumda, daha önce taşınan verilerin çoğaltılmasını önlemek için Magento 2 veritabanı dökümünüzü geri yüklemenizi öneririz."
WackGet

@Mateusz, Bu hatayı aldım, "Dürüstlük kısıtlaması ihlali: 1062 'WISHLIST_CUSTOMER_ID' anahtarı için yinelenen giriş '0'"
jafar pinjar

2

Bu sorunu benim için çözen bu çözümü buldum https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

Çözüm, eav_attribute_set tablosunun "attribute_value_name" alanındaki "Default" adını içeren tüm değerleri Magento 1 veritabanındaki "Default_x" olarak yeniden adlandırmak ve taşıma işlemini sıfırdan çalıştırmaktır.

Benim durumumda, "Varsayılan" adında 9 kayıt vardı. Bu yüzden onları Default_1 olarak Default_9 olarak değiştirdim ve mükemmel çalıştı!


Teşekkürler, bu benim için de işe yaradı. Sonra ilgili bir yinelenen anahtar hata var EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODEve benzer bir yaklaşımla çözüldü:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@Alfredo Lanzetta, M2'ye başarıyla geçtim, ancak özel düzen seçeneğiyle ilgili bir sorunum var gibi görünüyor. Aynı şey hakkında görüşlerinizi almak istiyorum. Soruma bir göz atabilir misiniz?
CodeForGood

1

Benim durumumda : Bu oldu ve taşıma yeniden yüklemeden önce benim magento 2 veritabanının bir yedek almak zorunda kaldı.

Sizin durumunuzda : Belki de veri taşıma işlemini ikinci kez yeniden yüklemeniz gerekiyordu.


hi @Kevin, reset komutu ayarları sıfırlamayacak mı? en baştan başlamayacak mı? her zaman db sıfırlamak gerekir?
jafar pinjar

@jafarpinjar (veya buna bakan başka biri) Evet, doğru. Her seferinde veritabanını geri yüklemeniz gerekir. Magento 2'nin belgelerinden: "Veri Taşıma Aracı'nı en başından çalışmaya zorlamak için --reset bağımsız değişkenini kullanın. Bu durumda, daha önce taşınan verilerin çoğaltılmasını önlemek için Magento 2 veritabanı dökümünüzü geri yüklemenizi öneririz."
WackGet

1

Bu sorunu gidermek için,

  1. Öncelikle, önceden taşınmış öznitelik kümelerini kontrol etmeniz gerekir.
  2. Ardından, varsayılan ayar dışındaki öznitelik kümelerini silin.

Bunu SQL sorgulama uygulamanız veya arayüzünüz üzerinden yapabilirsiniz.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Geçiş Veritabanı Magento 2 ile tekrar kontrol edin. Bazen Veri taşıma aracında veritabanı adını değiştirmedik.

Yeni Magento örneğini yeniden yükleyin ve veri taşıma aracına doğru bir şekilde veritabanı adı ekleyin


0

Veri Taşıma Aracı utf8 içindeki kaynaktan veri almaz.
İşte bu sorunun basit bir çözümü:

Düzenle: 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


Bunun neden birincil anahtarı çoğaltmada fark yaratacağını açıklayabilir misiniz?
domdambrogia

0

Deneyimlerime göre, yüklü örnek veriler var. Yani, aşağıdaki adımları yaptım.

  1. Veritabanını bıraktım
  2. Sonra magento 2'yi örnek verileri olmadan tekrar kurun.

Sonra göç edebilirim.


0

Aşağıdaki sql ile sorunum düzeltildi:

Bütünlük kısıtlaması ihlali: 1062 Anahtar için yinelenen '4-Images' girişi - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Öyleyse bir şey dene

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.