Di chuyển dữ liệu Lỗi bước Eav


11

Bất cứ ai có vấn đề này?

di chuyển dữ liệu> Bước EAV

SQLSTATE [23000]: Vi phạm ràng buộc toàn vẹn: 1062 Mục nhập trùng lặp '1-Migration_Default' cho khóa 'EAV_ATTRIBUTE_SET_ENTITY_TYPE_ID_ATTRIBUTE_SET_NAME'


Bạn đã tìm thấy bất kỳ giải pháp cho điều này?
Gaurav Agrawal

Câu trả lời:


4

Lỗi này xảy ra khi công cụ di chuyển không thể truyền dữ liệu (ví dụ do vi phạm tính toàn vẹn) mà không khôi phục và được chạy lại. Nó cố gắng tạo bộ thuộc tính "Migration_Default" và không thành công, vì nó đã có trong cơ sở dữ liệu.

Những gì bạn phải làm là:

1) Khôi phục cơ sở dữ liệu Magento 2.0 của bạn từ một bản sao mà bạn (hy vọng) đã tạo trước khi chạy công cụ di chuyển.

2) Chạy lại công cụ di chuyển và kiểm tra lỗi đầu tiên mà nó không thành công. Trong trường hợp của tôi, đó là:

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

3) Khắc phục sự cố (Tôi phải xóa thủ công một hàng trong DB).

Lặp lại các bước cho đến khi bạn xóa tất cả các lỗi và thấy thông báo âm thanh ngọt ngào:

Migration completed

Tôi đang đối mặt với cùng một vấn đề, nơi tôi có thể thay đổi giá trị này?
Purushotam Sharma

1
Giá trị nào? Làm cách nào để xóa một hàng DB gây ra vi phạm ràng buộc toàn vẹn? Nhìn vào tên chỉ mục. Trong trường hợp của tôi, đó là "URL_REWRITE_REQUEST_PATH_STORE_ID". Phần đầu tiên của nó là tên của bảng có hồ sơ vi phạm. Trong trường hợp của tôi, đó là url_rewrite (hay chính xác hơn là my-prefix_url_rewrite). REQUEST_PATH và STORE_ID là hai cột mà khi đặt cùng nhau phải là duy nhất. Trong trường hợp của tôi, công cụ di chuyển đã cố gắng chèn hai bản ghi với "home" trong request_path và 1 dưới store_id. Tôi đã phải loại bỏ cái đầu tiên.
Mateusz

@Mateusz, nếu chúng ta sử dụng lệnh, -r nó sẽ không thiết lập lại db và bắt đầu lại từ đầu? mỗi lần khôi phục db là quá nhiều thời gian thực hiện các quy trình
jafar pinjar

@jafarpinjar (hoặc bất cứ ai khác nhìn vào điều này) Vâng đúng vậy. Bạn cần khôi phục cơ sở dữ liệu mỗi lần. Từ tài liệu của Magento 2: "Để buộc Công cụ di chuyển dữ liệu chạy lại từ đầu, hãy sử dụng đối số --reset. Trong trường hợp đó, chúng tôi khuyên bạn nên khôi phục kết xuất cơ sở dữ liệu Magento 2 của mình để tránh trùng lặp dữ liệu đã di chuyển trước đó."
WackGet

@Mateusz, tôi có lỗi này, "Vi phạm ràng buộc toàn vẹn: 1062 Mục nhập trùng lặp '0' cho khóa 'WISHLIST_CUSTOMER_ID'"
jafar pinjar

2

Tôi tìm thấy giải pháp này đã giải quyết vấn đề này cho tôi https://github.com/magento/data-migration-tool/issues/235#issuecomment-321923437

Giải pháp là đổi tên tất cả các giá trị có chứa tên "Mặc định" trong trường "property_value_name" của bảng eav_attribution_set thành "Default_x" trong cơ sở dữ liệu Magento 1 và chạy di chuyển từ đầu.

Trong trường hợp của tôi, có 9 bản ghi với tên "Mặc định". Vì vậy, tôi đã đổi tên chúng thành Default_1 thành Default_9 và nó hoạt động hoàn hảo!


Cảm ơn, điều này làm việc cho tôi quá. Tiếp theo, tôi gặp lỗi khóa trùng lặp có liên quan EAV_ATTRIBUTE_GROUP_ATTRIBUTE_SET_ID_ATTRIBUTE_GROUP_CODEvà đã khắc phục bằng cách tiếp cận tương tự:UPDATE eav_attribute_group SET attribute_group_name = CONCAT(attribute_group_name, "_", attribute_set_id) WHERE attribute_group_name = "General";
WackGet

@Alfredo Lanzetta, tôi đã chuyển thành công sang M2, nhưng dường như có vấn đề với tùy chọn bố cục tùy chỉnh. Tôi muốn những hiểu biết của bạn về cùng. Bạn có thể vui lòng xem câu hỏi của tôi không?
CodeForood

1

Trong trường hợp của tôi : Nó đã xảy ra với tôi và tôi đã phải nhập một bản sao lưu cơ sở dữ liệu magento 2 của mình trước khi tải lại di chuyển.

Trong trường hợp của bạn : Có thể bạn phải tải lại di chuyển dữ liệu lần thứ hai.


chào @Kevin, lệnh reset sẽ không thiết lập lại cài đặt? nó sẽ không bắt đầu lại từ đầu chứ? mỗi lần cần thiết lập lại db?
jafar pinjar

@jafarpinjar (hoặc bất cứ ai khác nhìn vào điều này) Vâng đúng vậy. Bạn cần khôi phục cơ sở dữ liệu mỗi lần. Từ tài liệu của Magento 2: "Để buộc Công cụ di chuyển dữ liệu chạy lại từ đầu, hãy sử dụng đối số --reset. Trong trường hợp đó, chúng tôi khuyên bạn nên khôi phục kết xuất cơ sở dữ liệu Magento 2 của mình để tránh trùng lặp dữ liệu đã di chuyển trước đó."
WackGet

1

Để khắc phục sự cố này,

  1. Trước tiên, bạn cần kiểm tra các tập thuộc tính đã được di chuyển.
  2. Sau đó xóa các bộ thuộc tính ngoại trừ bộ mặc định.

Bạn có thể làm điều đó thông qua ứng dụng hoặc giao diện truy vấn SQL của bạn.

DELETE FROM eav_attribute_set WHERE attribute_set_name != 'Default';

1

Kiểm tra kỹ với Cơ sở dữ liệu di chuyển Magento 2. Đôi khi, chúng tôi không thay đổi tên cơ sở dữ liệu trong công cụ di chuyển dữ liệu.

Cài đặt lại phiên bản Magento mới và thêm chính xác tên cơ sở dữ liệu vào công cụ di chuyển dữ liệu


0

Công cụ di chuyển dữ liệu không nhận được dữ liệu từ nguồn trong utf8.
Đây là một giải pháp đơn giản cho vấn đề này:

Biên tập: 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


Bạn có thể giải thích tại sao điều này sẽ tạo ra sự khác biệt trong việc sao chép khóa chính không?
domdambrogia

0

Theo kinh nghiệm của tôi, có dữ liệu mẫu được cài đặt. Vì vậy, tôi đã thực hiện các bước sau.

  1. Tôi đã đánh rơi cơ sở dữ liệu
  2. Sau đó cài đặt lại magento 2 mà không có dữ liệu mẫu.

Sau đó, tôi có thể di chuyển.


0

Đã sửa lỗi của tôi với sql sau:

Vi phạm ràng buộc toàn vẹn: 1062 Mục nhập trùng lặp '4 hình ảnh' cho khóa - Magento 2

delete from eav_attribute_group WHERE attribute_group_name = 'Images';

Vậy hãy thử một cái gì đó

delete from eav_attribute_group WHERE attribute_group_name = 'Home';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.