Я думаю, что здесь есть две не связанные проблемы:
1
Выбор первичного ключа способом, который, вероятно, уникален - UUID является приемлемым подходом. Вы можете использовать его с SBR или RBR, при условии, что клиентское приложение генерирует UUID. Если вы вызываете функцию mysql для ее генерации, вам необходимо использовать репликацию на основе строк. Репликация на основе строк, как правило, намного лучше, поэтому единственной причиной, по которой вы хотите использовать репликацию на основе операторов, является обратная совместимость с подчиненным MySQL <5.1 или унаследованным приложением, которое зависит от некоторых его свойств. </p>
2
Во-вторых, вы хотите сделать репликацию с несколькими мастерами. ЭТО НЕ БУДЕТ РАБОТАТЬ.
Репликация MySQL чрезвычайно упрощена - она записывает изменения в журнал, передает их с одного сервера на другой, читая журнал по мере необходимости.
Вы не можете выполнять репликацию с несколькими хозяевами, потому что она не удастся. MySQL не только фактически не поддерживает его (для произвольных топологий), но также не работает.
В репликации MySQL отсутствует алгоритм «разрешения конфликтов», он просто останавливается и прерывается, если обнаружен конфликт.
Даже если предположить, что ваша база данных не содержит НИКАКИХ УНИКАЛЬНЫХ ИНДЕКСОВ, кроме первичных ключей, которые выделяются UUID, у вашего приложения все еще могут быть правила, которые приводят к сбою нескольких мастеров.
Любые ограничения, инварианты или предположения в вашем приложении, вероятно, сработают, только если база данных имеет немедленную согласованность. Попытка использовать репликацию с несколькими хозяевами нарушает это предположение и приводит к тому, что ваше приложение переходит в неожиданные (то есть обычно невозможные) состояния.