2009-10-16 4 views
6

Я хочу создать специализированную машину SLAVE для репликации данных трех баз данных на трех разных серверах. Другими словами, я хочу выполнить Multiple Master => SIngle Slave.Возможно ли выполнить N-master => 1-ведомую репликацию с помощью MySQL?

Есть ли способ сделать это, насколько это возможно?

Спасибо!

ответ

10

Репликация с несколькими мастерами (ведомый с несколькими мастерами) не поддерживается MySQL (помимо MySQL Cluster). Вы можете выполнить репликацию мастер-мастера циклической (кольцевой) репликации (описано here или here).

В High performance MySQL 2nd edition авторах описывают способ эмулировать репликацию с использованием нескольких хозяв умного сочетания мастера-мастер репликации и двигателя Blackhole хранения (Глава 8 репликации> репликации Топология> Пользовательские репликациями Решение> Эмуляция репликации мультимастерной стр. 373 - 375) ,

Они показывают два, возможно, топологий:

с использованием двух со-мастеров (что позволяет переключать мастер ведомого от Мастер 1 к Master 2)

  • Master 1 :DB1 и тиражирование DB2 от Мастер 2; механизм хранения для всех таблиц в DB2 изменен на Blackhole, так что данные не будут эффективно сохранены на Master 1.
  • Master 2: хостов DB2 и размножается DB1 от Master 1; двигатель хранения для всех таблиц в DB1 изменяется на Blackhole так, чтобы данные не эффективно хранятся на Master 2
  • Ведомый 1: реплицируется DB1 и DB2 либо из Master 1 или Мастер 2 (позволяющий переключать мастеров); результатом является то, что Slave 1 реплицирует обе базы данных, которые эффективно размещаются на двух разных мастерах.

Используя мастер-цепь

  • Мастер 1: только хосты DB1
  • Мастер 2: хосты DB2 и реплицируется DB1 от Мастер 1; двигатель хранения для всех таблиц в DB1 изменяется на Blackhole так, чтобы данные не эффективно хранятся на Master 2
  • Ведомый 1: реплицируется DB1 и DB2 от Master 2; результатом является то, что Slave 1 реплицирует обе базы данных, которые эффективно размещаются на двух разных мастерах.

Пожалуйста, обратите внимание, что эта установка только позволяет отправлять обновления DB1 через Master 1 и обновления для DB2 в Master 2. Вы не можете отправлять обновления в любую таблицу произвольным мастерам.

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

0

Не знаю, о чем я знаю.

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

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

0

Я мало знаю о MySQL, но у вас нет возможности установить конфигурацию репликации «только для загрузки», где роль ведущего/издателя заключается только в сборе обновлений, сделанных на подчиненном/подписном уровень.

0

Возможно стоит посмотреть на maatkit's table sync - это не «настоящая» репликация, но это может быть достаточно.