Unique keys и репликация мастер-мастер

kvf77

Red Devil
Ситуация: пропала связь с одним из мастер-серверов (он не упал - просто канал за сбоил).
Все переключились на второй.

В таблицу с составным ключем по дате и ид писались данные и на первом и на втором сервере.

При поднятии канала - репликация упала - потому что и на первом мастере и на втором были дубликаты записей.

Как победить такую ситуацию? Очень нужна ваша помощь.
 

MiksIr

miksir@home:~$
Самый примитивный способ решения таких противоречий - это ID с шагом. Т.е. если 5 мастеров, то у каждого шаг =5 (ну или с запасом) и свое смещение.
 

kvf77

Red Devil
ну написано же что тут НЕ автоинкрементный ключ, а составной
 

MiksIr

miksir@home:~$
ну написано же "с составным ключем по дате и ид"
Но если вам больше нравится ответ, что мастер-мастер - это антипаттерн, который можно решить, но только очень хорошо зная структуру данных и способы работы с ними, то пожалуйста.
 

MiksIr

miksir@home:~$
ЗЫ: введите в составной ключ ID ноды. Потом скриптами пройдетесь и сами решите - что делать с записями, у которых "ид" и дата одинаковые, но разные ноды. Хотя вообще я не понимаю, как вы с этим живете изначально... или репликация синхронная?
 

akd

dive now, work later
Команда форума
а победить нужно только актуальные последствия или на будущее тоже?

если последствия, то какой смысл у нас спрашивать, вам виднее.
если на будущее, то в любом случае менять структуру PK
 

kvf77

Red Devil
да я четко понимаю, что надо менять структуру - только в наследие досталось много кода и куча гемора. хочу на время заткнуть дыру, чтобы спокойно переписать
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если innodb - можно попробовать прописать FK с on update cascade, обновить конфликтующую часть PK на 2м (рабочем) сервере и синхронизировать
 
Сверху