MySQL репликация на виртуальном хостинге - PullRequest
3 голосов
/ 12 марта 2011

Мне нужно сделать некоторые репликации MySQL.Некоторая информация:

  • У меня есть два экземпляра базы данных на виртуальном хостинге, поэтому я не могу использовать Mysql Replication (у меня нет доступа к файлам конфигурации).
  • Этодля некоммерческого проекта (образовательного), поэтому мы не можем позволить себе собственные серверы.
  • Если основной сервер не работает в течение нескольких минут, это, как правило, не так уж и плохо, но существуют определенные дни, когда нам ДЕЙСТВИТЕЛЬНО нужно иметьрешение для резервного копирования, синхронизированное с основным сервером (ограниченные по времени события на веб-сайте).

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

Я думаю о том, что каждый запрос SELECT / INSERT / UPDATE регистрируется в определенной таблице, и «подчиненный сервер» периодически запрашивает «главный сервер» содержимое этой таблицы.и примените соответствующие запросы.

Что вы думаете об этой идее?

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

Каков наилучший способ его реализации?

  • В коде php на каждом SELECT / INSERT / UPDATE я могу выполнить другую вставку в определенную таблицу (япросто вставьте запрос)
  • С триггером?

Ответы [ 2 ]

2 голосов
/ 25 марта 2013

Я успешно использовал комбинацию триггеров и объединенной таблицы для моделирования репликации данных из таблицы MyISAM на одном сервере в таблицу MyISAM на другом сервере в среде общего хостинга.

Любые вставки / обновления/ delete в моей главной таблице реплицируются в мою объединенную таблицу на том же сервере с помощью триггеров AFTER INSERT / AFTER UPDATE / AFTER DELETE.Затем эта федеративная таблица отправляет изменения в таблицу на другом сервере.

Я не могу взять кредит на разработку этого подхода, поскольку он очень полезно задокументирован RolandoMySQLDBA на сервереОшибка:
Может ли хранимая процедура MySQL вставлять / обновлять удаленный резервный сервер MySQL? .

Вот шаги, которые я реализовал:

На сервере SERVER2 ...

  • Я создал таблицу (назовем ее slave_table ) со столбцами, которые соответствуют столбцам вглавная таблица (назовем ее master_table ) на сервере SERVER1.

на сервере SERVER1 ...

  • Iсоздал таблицу (назовем ее federated_table ) со столбцами, которые совпадают со столбцами в master_table , указав механизм хранения FEDERATED и строку CONNECTION для ссылки на slave_table на SERVER2 ... CONNECTION='mysql://username:password@SERVER2:port/database/slave_table';

  • Я добавил AFTER INSERT, AFTER UPDATE и AFTER DELETE триггеры к master_table , который содержит команды SQL для ...INSERT INTO federated_table VALUES (NEW.id,NEW.title);,UPDATE federated_table SET id=NEW.id,title=NEW.title WHERE id=OLD.id; иDELETE FROM federated_table WHERE id=OLD.id; соответственно.

Надеюсь, это поможет кому-то в аналогичной ситуации.

0 голосов
/ 09 февраля 2012

Две идеи:

  1. Хрон, который находит максимальное количество (ID) в таблицах резервной базы данных, а затем получает все записи в основной базе данных, кроме этого.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...