Synchronizacja bazy danych MySQL między dwiema bazami danych


81

W różnych sklepach prowadzimy aplikację Java PoS (Point of Sale) z zapleczem MySql. Chcę, aby bazy danych w sklepach były zsynchronizowane z bazą danych na serwerze hosta.

Gdy w sklepie zajdą jakieś zmiany, powinny one zostać zaktualizowane na serwerze hosta. Jak to osiągnąć?



Czy łatwo to zrobić? Jak myślisz, jak długo to zajmie?
peedee

2
Replikacja @peedee MySQL jest dość łatwa do skonfigurowania. Kilka poleceń i wstępna synchronizacja. Pierwszy raz zajęło mi około 30 minut.
ceejayoz

2
miejsce na dobre pytanie zastanawiało się nad tym samym w tym samym celu]
codefreaK

Możesz użyć funkcji replikacji MySQL lub jest dostępnych kilka narzędzi, które synchronizują bazy danych, są one wymienione tutaj stackoverflow.com/questions/52583/ ...
Peter Venderberghe

Odpowiedzi:


60

Replikacja nie jest trudna do stworzenia.

Oto kilka dobrych samouczków:

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

Oto kilka prostych zasad, o których musisz pamiętać (jest ich oczywiście więcej, ale to główna koncepcja):

  1. Konfiguracja 1 serwera (master) do zapisu danych.
  2. Skonfiguruj 1 lub więcej serwerów (slave) do odczytu danych.

W ten sposób unikniesz błędów.

Na przykład: jeśli skrypt wstawi się do tych samych tabel zarówno na serwerze głównym, jak i podrzędnym, wystąpi zduplikowany konflikt klucza podstawowego.

Możesz postrzegać „slave” jako serwer „zapasowy”, który zawiera te same informacje co serwer główny, ale nie może bezpośrednio dodawać danych, postępuj tylko zgodnie z instrukcjami serwera głównego.

UWAGA: Oczywiście możesz czytać z mastera i możesz pisać do slave, ale upewnij się, że nie piszesz do tych samych tabel (master to slave i slave to master).

Zalecałbym monitorowanie serwerów, aby upewnić się, że wszystko jest w porządku.

Daj mi znać, jeśli potrzebujesz dodatkowej pomocy


Tak, Shop = master, Server = slave
Book Of Zeus

Skonfigurowałem teraz mastera i mam zamiar połączyć się z jedną bazą danych slave .. kiedy to zrobię, wszelkie zmiany w master odbiją się na slave, a zmiany w slave będą odzwierciedlać również master?
peedee

tak od razu, jeśli konfiguracja jest dobra! możesz wstawić rekord do mastera i wybrać w slave do przetestowania. jeśli to przejdzie, jesteś gotowy!
Book Of Zeus,

Hej kolego ... Mam błąd 1045 na niewolniku. jaki byłby tego powód? masz jakiś pomysł?
peedee

BŁĄD 1045: Odmowa dostępu dla użytkownika: „root @ localhost” (przy użyciu hasła: NIE) i dev.mysql.com/doc/refman/5.1/en/access-denied.html
Book Of Zeus

23

trzy różne podejścia:

  1. Klasyczne podejście klient / serwer: nie umieszczaj bazy danych w sklepach; po prostu pozwól aplikacjom uzyskać dostęp do twojego serwera. Oczywiście lepiej jest ustawić VPN, ale zwykłe zawinięcie połączenia SSL lub ssh jest rozsądne. Pro: tak pierwotnie myślano o bazach danych. Wada: jeśli masz duże opóźnienia, złożone operacje mogą działać wolno, może być konieczne użycie procedur składowanych, aby zmniejszyć liczbę rund.

  2. replikowany wzorzec / wzorzec: jak sugerował @Book Of Zeus. Wady: nieco bardziej skomplikowana konfiguracja (zwłaszcza jeśli masz kilka sklepów), włamanie do dowolnego urządzenia warsztatowego może potencjalnie zagrozić całemu systemowi. Zalety: lepsza responsywność, ponieważ operacje odczytu są całkowicie lokalne, a operacje zapisu są propagowane asynchronicznie.

  3. operacje offline + krok synchronizacji: wykonuj całą pracę lokalnie i od czasu do czasu (może to być raz na godzinę, codziennie, co tydzień, cokolwiek), napisz podsumowanie wszystkich nowych / zmodyfikowanych rekordów z ostatniej operacji synchronizacji i wyślij na serwer. Zalety: może działać bez sieci, szybko, łatwo sprawdzić (czy podsumowanie jest czytelne). Wady: nie masz informacji w czasie rzeczywistym.


10
Mam wymóg skonfigurowania trzeciego typu synchronizacji db (operacje offline + synchronizacja), chciałbym przeczytać więcej na ten temat. Nie można wygooglować tego. Czy jest to książka / artykuł, do którego mogę się odwołać?
abhishek77in

10

Odpowiedzią jest SymmetricDS. Obsługuje wielu abonentów z jednokierunkową lub dwukierunkową asynchroniczną replikacją danych. Wykorzystuje technologie internetowe i bazodanowe do replikowania tabel między relacyjnymi bazami danych, w czasie zbliżonym do rzeczywistego, jeśli jest to pożądane.

Kompleksowe i niezawodne API Java dostosowane do Twoich potrzeb.


Jeśli mam serwer wewnętrzny z oddzielną bazą danych w jakimś obszarze bez internetu i mam kupujących online w bazie danych hostowanej w sieci Web i chcę przenieść wewnętrzną bazę danych na żywo, czy możesz powiedzieć, co się stanie z automatycznymi przyrostami między dwoma jeśli obaj rezerwowali ten sam identyfikator, będzie bałagan, prawda!? więc (muszę zsynchronizować operacje wykonane na wewnętrznej bazie danych z na żywo bez wpływu na identyfikatory auto incremeant i relacje między tabelami)
shareef

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.