Назад | Перейти на главную страницу

Magento> Slave ломается, когда продукт добавляется из мастера

Название действительно говорит само за себя. Здесь LAST_ERROR:

Last_Error: Error 'Cannot add or update a child row: a foreign key constraint fails
(`cd1n401`.`cdi_catalog_product_entity_int`, CONSTRAINT `FK_CDI_CAT_PRD_ENTT_INT_ENTT_ID_CDI_CAT_PRD_ENTT_ENTT_ID`
FOREIGN KEY (`entity_id`) REFERENCES `cdi_catalog_product_entity` (`entity_id`)' on query.
Default database: 'cd1n401'.
Query: 'INSERT INTO `cdi_catalog_product_entity_int` (`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`)
VALUES ('4', '178', '0', '3', NULL), ('4', '180', '0', '3', NULL), ('4', '181', '0', '3', NULL), ('4', '182', '0', '3', NULL)
ON DUPLICATE KEY UPDATE `value` = VALUES(`value`)'

Кто-нибудь раньше настраивал главный раб для магнето?

Обычно подобные ошибки репликации вызваны несогласованностью данных между мастером и ведомым устройством - очевидно, что ограничение было выполнено на ведущем устройстве, поскольку запрос был успешным, но его нет на ведомом устройстве.

В этот момент вся ваша (подчиненная) база данных становится подозрительной. Вы можете отследить конкретное несоответствие и исправить его вручную, но как узнать, что оно единственное? Самый безопасный вариант - запустить новое ведомое устройство, а после того, как репликация завершится, убить старого.

Однако это только устранение симптома; вам нужно учитывать, как ведомое устройство рассинхронизировалось с ведущим. Безусловно, наиболее распространенной проблемой является выполнение модификации (т. Е. НеSELECT) команды на ведомом. К сожалению, вы не можете отключить это полностью, поскольку для процесса репликации MySQL требуются права записи, но вы можете проверить, у кого есть такие права. Каждый человек, у которого есть доступ к ведомому устройству для запросов, должен знать, что им не следует запускать UPDATEs (и, в идеале, ограничить их разрешения, чтобы они не могу). Каждому фрагменту кода, который обращается к ведомому устройству, нужно только когда-либо выполнять SELECTс.

Другая возможная причина заключается в том, что процесс, который вы использовали для создания начального набора данных ведомого устройства (например, извлечение его из резервной копии ведущего устройства), ошибочен, и он запускался с несогласованностью еще до того, как репликация даже началась.