Синхронізація бази даних Mysql між двома базами даних


81

Ми запускаємо додаток Java PoS (Point of Sale) у різних магазинах із серверною базою MySql. Я хочу, щоб бази даних у магазинах синхронізувалися з базою даних на хост-сервері.

Коли в магазині відбуваються деякі зміни, вони повинні оновлюватися на хост-сервері. Як мені цього досягти?



Чи легко це зробити ?? як довго ти думаєш, що це займе ??
peedee

2
Реплікацію @peedee MySQL досить легко налаштувати. Кілька команд та початкова синхронізація. Перший раз мені зайняло близько 30 хвилин.
ceejayoz,

2
spot на хорошому питанні цікавився тим самим з тією ж метою]
codefreaK

Ви можете використовувати функцію реплікації MySQL або є деякі інструменти доступні , які роблять синхронізацію бази даних, в якому вони перераховані тут stackoverflow.com/questions/52583 / ...
Пітер Venderberghe

Відповіді:


60

Реплікацію створити не дуже складно.

Ось кілька хороших підручників:

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 сервер (головний) для запису даних.
  2. Налаштуйте 1 або більше серверів (ведених) для читання даних.

Таким чином, ви уникнете помилок.

Наприклад: якщо ваш скрипт вставити в однакові таблиці як головного, так і підлеглого, у вас виникне дублікат конфлікту первинного ключа.

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

ПРИМІТКА: Звичайно, ви можете читати з ведучого, і ви можете писати на ведений, але переконайтесь, що не пишете в однакові таблиці (майстер на ведений і ведений на головний).

Я б порекомендував відстежувати ваші сервери, щоб переконатися, що все в порядку.

Повідомте мене, якщо вам потрібна додаткова допомога


Так, Shop = master, Server = slave
Book Of Zeus

Я налаштував головну зараз, і я збираюся підключитися до однієї веденої бази даних .. коли я це роблю, будь-які зміни в майстрі відображатимуться на веденому, а зміни в веденому також відображатимуться на головному?
peedee

так відразу, якщо настройка хороша! Ви можете вставити запис у головне і зробити вибір у підлеглому для тестування. якщо це пройде, ви готові!
Книга Зевса,

Привіт, товаришу ... У мене виникла помилка 1045 про веденого. що може бути причиною цього? ти маєш ідею?
peedee

ПОМИЛКА 1045: Відмовлено в доступі для користувача: 'root @ localhost' (Використовуючи пароль: НІ) та dev.mysql.com/doc/refman/5.1/en/access-denied.html
Книга Зевса

23

три різних підходи:

  1. Класичний підхід клієнт / сервер: не розміщуйте в магазинах базу даних; просто попросіть програми отримати доступ до вашого сервера. Звичайно, краще, якщо ви встановите VPN, але просто обернути з'єднання в SSL або ssh є розумним. Плюс: це те, як спочатку думали бази даних. Недолік: якщо у вас велика затримка, складні операції можуть стати повільними, можливо, доведеться скористатися збереженими процедурами, щоб зменшити кількість туди-назад.

  2. тиражований майстер / майстер: як запропонував @Book Of Zeus. Мінуси: дещо складніший у налаштуванні (особливо якщо у вас кілька магазинів), злом у будь-якому магазині може потенційно скомпрометувати всю систему. Плюси: краща чутливість, оскільки операції читання є повністю локальними, а операції запису розповсюджуються асинхронно.

  3. офлайн-операції + крок синхронізації: виконуйте всі роботи локально і час від часу (може бути раз на годину, щодня, щотижня, що завгодно), пишіть резюме з усіма новими / зміненими записами з останньої операції синхронізації та надсилайте на сервер. Плюси: може працювати без мережі, швидко, легко перевіряється (якщо короткий зміст читається). Мінуси: у вас немає інформації в режимі реального часу.


10
У мене вимога встановити третій тип синхронізації баз даних (офлайн-операції + синхронізація), я хотів би прочитати більше про це. Не можу загуглити цей. Чи є їх книга / стаття, на яку я можу посилатися?
abhishek77в

10

SymmetricDS - це відповідь. Він підтримує декількох абонентів з однонаправленою або двонаправленою асинхронною реплікацією даних. Він використовує технології Інтернету та баз даних для тиражування таблиць між реляційними базами даних, при бажанні майже у реальному часі.

Комплексний та надійний Java API відповідно до ваших потреб.


якщо у мене є внутрішній сервер з окремими db to by в якійсь області, де немає Інтернету, і у мене є інтернет-покупці в базі даних, розміщених в Інтернеті, і я хочу перенести придбані внутрішні бази даних у реальний час, чи можете ви повідомити, що буде з автоматичним збільшенням між двома якщо вони обидва резервували однаковий ідентифікатор, це буде брудно, правда!? отже (мені потрібно синхронізувати операції, зроблені на внутрішньому базі даних, у реальний час, не впливаючи на автоматичне збільшення ідентифікаторів та відносини між таблицями)
shareef,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.