Двусторонняя синхронизация базы данных mySQL между размещенным и локальным рабочим сервером - PullRequest
4 голосов
/ 03 ноября 2011

Итак, сценарий таков:

У меня есть база данных mySQL на локальном сервере, работающем под управлением Windows 2008 Server. Сервер предназначен только для пользователей нашей сети и содержит информацию о графике производства наших компаний. У меня есть та же база данных, работающая на размещенном сервере под управлением Linux, который должен быть доступен онлайн, чтобы наши клиенты могли подключиться к нему и обновить свои заказы.

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

Моя первая идея - сделать (в конце сценариев PHP, которые генерируют изменения в таблицах заказов) экспорт внесенных изменений, возможно, используя INSERT в OUTFILE WHERE account = account или что-то подобное. Это позволит сохранить размер файла небольшим, а не экспортировать всю таблицу заказов. Я зациклен на том, как (A) экспортировать это как файл SQL, а не как CSV (B), как включить информацию о том, что было удалено, а также о том, что было вставлено (C), как извлечь этот файл на другом сервере и выполните инструкцию SQL.

В настоящее время я изучаю SSH и PowerShell, но не могу сформулировать четкое представление о том, как именно это будет работать. Я также изучаю задачи cron и запланированные задачи Windows. Однако было бы лучше, если бы какие-то обновления просто происходили всякий раз, когда происходило изменение, а не в расписании, чтобы синхронизировать их в режиме реального времени, но я не могу понять это. Я бы хотел запускать запланированную задачу / cronjob хотя бы раз в несколько минут, хотя думаю, что все, что нужно сделать, это проверить, есть ли какие-либо файлы дампа, которые необходимо поместить на противоположный сервер, не обязательно синхронизировать ничего, если ничего не изменилось.

Кто-нибудь когда-нибудь делал что-то подобное? Мы говорим об одновременном изменении / добавлении / удалении от 1 (мин) до 160 строк (макс.) В таблицах. Я хотел бы услышать мысли людей об этом всем, поскольку я продолжаю исследовать свои варианты. Спасибо.

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

+ 1 Подробнее Примечание Еще одна вещь, о которой я сейчас думаю, - это добавить в конце скрипта обновления заказа на одной стороне другой скрипт config / connect, указывающий на базу данных других серверов, а затем повторно выполнить те же самые запросы, поскольку они имеют идентичную структуру. Теперь это звучит просто ... Мысли?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Возможно, вы не знаете, что сам MySQL может быть настроен с базами данных на отдельных серверах, которые произвольно синхронизируются друг с другом. Смотрите здесь для некоторых деталей; также, поиск вокруг для репликации кольца MySQL. Установка немного хрупкая, и вам потребуется немного узнать о MySQL replication . Или вы можете построить кластер; намного более высокая кривая обучения, но менее хрупкая.

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

2 голосов
/ 15 июня 2012

Запуск запроса на локальном и удаленном сервере может быть проблемой, если разрывается соединение.Лучше каждый запрос локально хранится в файле, например, GG-MM-DD-HH.sql, а затем отправлять данные каждый час, когда истекает час.Например, период обновления может быть сокращен до 5 минут.

Таким образом, если разрывается соединение, переустановка принимает все оставшиеся файлы.В конце файла вставьте CRC для проверки содержимого.

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