Репликация базы данных MySQL - PullRequest
4 голосов
/ 27 апреля 2009

Это сценарий:

  1. У меня есть сервер MySQL с базой данных, назовем его consolidateddb . Эта база данных представляет собой объединение нескольких таблиц из различных баз данных
  2. У меня есть другой сервер MySQL, с исходными базами данных, эти базы данных являются производственными базами данных и ежедневно обновляются.
  3. Компания хочет скопировать каждое обновление / вставку / удаление для каждой таблицы в производственных базах данных в соответствующие таблицы в consolidateddb .

Будет ли репликация сделать это? Я знаю, что репликация выполняется для баз данных в базе данных, но не для таблиц, которые принадлежат разным базам данных к одной целевой базе данных.

Надеюсь, мое объяснение было ясным. Спасибо.

Редактировать: Будет ли работать рекурсивная копия всех таблиц в каждой базе данных для одного ведомого устройства? Или это уродливое решение?

Ответы [ 7 ]

11 голосов
/ 30 апреля 2009

Чтобы прояснить некоторые вещи, давайте назовем вещи в соответствии с текущей практикой mysql. База данных - это сервер базы данных. Схема - это экземпляр базы данных. Сервер базы данных может иметь несколько схем. Таблицы живут в схеме.

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

Вы можете выбрать репликацию всех данных, или вы можете выбрать некоторые схемы или даже только некоторые из таблиц.

Нельзя выбирать таблицы из разных схем и реплицировать их в одну схему, таблица принадлежит определенной схеме.

Кстати, важное замечание. Сервер репликации не может быть ведомым для нескольких мастеров. Вы можете имитировать это, используя объединенные таблицы, но это никогда не скопирует данные на сервер консолидации, просто покажите их так, как если бы данные с разных серверов были на одном сервере.

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

2 голосов
/ 06 мая 2009

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

Что-то очень похожее:

mysqlbinlog [binary log files] | mysql -h consolidated

вам понадобится какое-то простое приложение (я подозреваю, что это может быть сделано в bash, если вам нужно), чтобы обернуть логику.

0 голосов
/ 30 апреля 2009

Насколько мне известно, вы можете настроить репликацию (MySQL 4+), и в файле my.cnf ведомое устройство должно обрабатывать только определенные таблицы или иметь основной журнал только определенных таблиц, в любом случае это решит вашу проблему.

Вот руководство по некоторым методикам:

http://www.onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql-replication.html

У меня очень мало проблем с настройкой репликации, все мои проблемы возникли при попытке синхронизировать БД, особенно после перезагрузки и т. Д.

0 голосов
/ 29 апреля 2009

Вы можете попробовать maatkit toolkit. Это бесплатная загрузка и содержит множество инструментов, которые специализируются на оптимизации таких вещей, как архивирование таблиц. Я использовал это в прошлых проектах для дублирования определенных данных в другую БД и т. Д. Вы можете сделать это на основе времени или любого другого числа факторов.

0 голосов
/ 28 апреля 2009

Вы можете выполнить это с MySQL Proxy

0 голосов
/ 27 апреля 2009

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

Я не думаю, что MySQL предоставляет какой-либо встроенный способ перемещения операторов репликации между базами данных (т. Е. «Вставить в db1.table1 ...» -> «вставить в db2.table1»). Возможно, вам удастся обмануть его, вручную изменив журналы репликации на лету, но это не будет излишней репликацией MySQL.

0 голосов
/ 27 апреля 2009

Извлечение Репликация разных баз данных на разные ведомые устройства , посмотрите, поможет ли это вам каким-либо образом.

...