Синхронизация базы данных Mysql между двумя базами данных
Мы запускаем приложение Java PoS (Point of Sale) в различных магазинах с бэкэндом MySql. Я хочу, чтобы базы данных в магазинах были синхронизированы с базой данных на хост-сервере.
Когда в магазине происходят какие-то изменения, они должны обновляться на главном сервере. Как мне этого добиться?
Ответы
Ответ 1
Репликация не очень сложно создать.
Вот несколько хороших уроков:
http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-database-replication/
http://www.ghacks.net/2009/04/09/set-up-mysql-database-replication/
http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
http://www.lassosoft.com/Beginners-Guide-to-MySQL-Replication
Вот некоторые простые правила, которые вам нужно иметь в виду (там, конечно, конечно, но это основная концепция):
- Установить 1 сервер (мастер) для записи данных.
- Настройка 1 или более серверов (ведомых) для чтения данных.
Таким образом, вы избежите ошибок.
Например:
Если ваш script вставить в те же таблицы как на главном, так и на ведомом, у вас будет повторяющийся конфликт первичного ключа.
Вы можете просмотреть "ведомый" как "резервный" сервер, который хранит ту же информацию, что и главный, но не может напрямую добавлять данные, только следуйте инструкциям главного сервера.
ПРИМЕЧАНИЕ. Конечно, вы можете читать мастер, и вы можете писать на подчиненный, но убедитесь, что вы не пишете в одни и те же таблицы (мастер для подчиненного и подчиненного подчиненных).
Я бы рекомендовал следить за вашими серверами, чтобы убедиться, что все в порядке.
Сообщите мне, если вам нужна дополнительная помощь
Ответ 2
три разных подхода:
-
Классический подход клиент/сервер: не помещайте в магазины какую-либо базу данных; просто попросите приложения получить доступ к вашему серверу. Конечно, это лучше, если вы установите VPN, но просто обернуть соединение в SSL или ssh является разумным. Pro: это то, как изначально были задуманы базы данных. Con: если у вас высокая задержка, сложные операции могут замедляться, вам, возможно, придется использовать хранимые процедуры, чтобы уменьшить количество раундов.
-
реплицированный мастер/мастер: как предложил @Book Of Zeus. Минусы: несколько сложнее в настройке (особенно если у вас несколько магазинов), взлом в любом магазине может потенциально поставить под угрозу всю систему. Плюсы: лучшая отзывчивость, поскольку операции чтения полностью локальны, а операции записи распространяются асинхронно.
-
автономные операции + шаг синхронизации: все работает локально и время от времени (может быть один раз в час, ежедневно, еженедельно и т.д.) записывать сводку со всеми новыми/измененными записями из последней операции синхронизации и отправлять к серверу. Плюсы: может работать без сети, быстро, легко проверить (если сводка читаема). Минусы: у вас нет информации в режиме реального времени.
Ответ 3
SymmetricDS - это ответ. Он поддерживает несколько подписчиков с одним направлением или двунаправленной асинхронной репликацией данных. Он использует технологии Интернета и баз данных для репликации таблиц между реляционными базами данных, в ближайшем реальном времени, если это необходимо.
Комплексный и надежный Java API для ваших нужд.
Ответ 4
Посмотрите Инструменты сравнения схем и данных в dbForge Studio для MySQL. Этот инструмент поможет вам сравнить, увидеть различия, создать синхронизацию script и синхронизировать две базы данных.