Ответы:
По замыслу, один процесс mysqld не может одновременно слушать двух разных мастеров.
Команда CHANGE MASTER TO позволяет вам установить только один Master в качестве источника для чтения.
Чтобы подражать этому, вам придется программно переключаться между двумя Мастерами. Как ты это делаешь ?
Вот основная идея
Настройте репликацию M1 на S1 и затем M2 на S1 следующим образом
Каждый раз, когда вы переключаетесь с одного мастера на другой, вы должны записать два значения из SHOW SLAVE STATUS\G
Эти два значения представляют собой последний оператор SQL, который поступил от мастера и должен был быть выполнен на ведомом устройстве.
Есть одно важное предостережение: пока M1 и M2 обновляют взаимоисключающие базы данных, этот алгоритм должен быть в порядке.
Хотите верьте, хотите нет, но я обратился к такому вопросу в ServerFault еще в мае 2011 года. На самом деле я объяснил, как эмулировать настоящего мультимастера / одного подчиненного с помощью BLACKHOLE Storage Engine, основанного на книге «High Performance MySQL».
Решение Роландо имеет много предостережений. Первый, являющийся одним потоком реплик, обязательно не реплицируется, в то время как другой работает. Это даст вам периоды времени, когда ваш раб не синхронизирован. Теперь вам нужно сыграть деликатный баланс, чтобы у каждого было достаточно времени, чтобы наверстать упущенное, когда у него есть «ход».
Как описано выше, вы также должны сыграть бухгалтера в позиции журнала, чтобы переключиться обратно. Это на самом деле просто кажется ошибочным, открывая окно для пропущенных или несогласованных данных или даже прерывая репликацию, когда она идет не так (либо из-за ошибки «просто один» в позиции журнала)
Я бы порекомендовал просто запустить несколько экземпляров MySQL. Ничто не мешает вам запускать два или более mysql на одной машине. Разумеется, они не могут работать на одном и том же порту. Однако я не вижу в этом проблемы, поскольку каждый клиент и библиотека позволяет вам указать что-то отличное от 3306.
Просто укажите port = 3307 (или что-то еще в одном из файлов .cnf).
Вы также должны позаботиться о том, чтобы индивидуально настроенные пулы буферов и другие конфигурации памяти не расходились друг с другом. На самом деле это является преимуществом, поскольку вы можете более точно настроить эти параметры в соответствии с конкретными требованиями к реплицируемым базам данных.
Таким образом, у вас есть только два потока репликации на одном сервере; никогда не позади, не требуется бухгалтерский учет, не требуется сценарий «подкачки».
Fan in (многоисточниковая репликация) будет поддерживаться с MySQL 5.7.
Лабораторная версия доступна здесь: http://labs.mysql.com/
MariaDB, который может быть использован в качестве замены на месте для MySql. Поддерживает его с версии 10.2
Проблема с поддержкой Mysql 5.7 заключается в необходимости использования GTID, что означает, что мастер ДОЛЖЕН быть также изменен, в случае MariaDb это не так.
Пример / HowTo ссылка: http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100