Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Witam mam pytanie osób które miały styczność z taką synchronizacją baz danych, chciałem przeprowadzić jednokierunkową synchronizacje baz danych z mssql do mysql (cały crud najlepiej na określonej tabeli)
Tzn mam program księgowy/sprzedażowy w windows który zapisuje w bazie mssql i chciałbym wykonać synchronizacje jednokierunkową z mssql do mysql możliwe jak najbliżej czasu rzeczywistego
chatgpt podpowiada że np ds symmetric będzie do tego odpwiedni czy ktoś już wykonywał taką synchronizację ?
Rozwiązań jest pewnie wiele, ale dobór właściwego zależeć będzie od tego, jakie stawiasz warunki, np.:
Jak często chcesz wykonywać synchro
Ile tabel chcesz synchronizować
Jak duży ruch jest na tej bazie
Czy dopuszczasz konieczność "oprogramowania" synchronizacji każdej tabeli z osobna, czy potrzebujesz narzędzia, w którym wybierzesz tabelę, a ono samo za Ciebie będzie rzeźbić
Najprostsze (co nie znaczy, że najłatwiejsze) rozwiązanie, jakie przychodzi mi na myśl, to skonfigurowanie w MS LinkedServera do mySQL i cykliczne pisanie do drugiej bazy za pomocą OPENQUERY. Ale żeby to miało ręce i nogi, musisz dla synchronizowanej tabeli mieć zdefiniowane przynajmniej jedno pole mówiące o tym, czy dany rekord był już synchronizowany, żeby nie mielić każdorazowo całej tabeli. No i obsługę rekordów usuniętych też trzeba jakoś ogarnąć (być może stosując dodatkową tabelę).
Z innych rozwiązań, MS dostarcza coś, co zwie się SSIS (SQL Server Integration Services) i służy między innymi do tego, co chcesz zrobić. Ale nigdy tego nie używałem, więc nie wiem, na ile to pomocne.
Użycie ssis w tym przypadku to chyba trochę strzelanie do muchy z armaty. Liked service i trigger to chyba najprostsze z punktu widzenia implementacji.
synchro na poziomie triggera jest kuszące (bo real-time synchro i dużo prostsze w implementacji), ale w przypadku niedostępności LinkedServera rodzi wyjątek, który trzeba zabezpieczyć, a finalnie i tak odpalać synchronizację on-demand
Jaki masz ruch na tej tabeli? Dużo tam jest danych do transferowania? Możesz wprowadzać zmiany na bazie systemu ksigowego czy jest to zablokowane np na poziomie licencji itp?
chciałbym wykonać synchronizacje jednokierunkową z mssql do mysql możliwe jak najbliżej czasu rzeczywistego
Jak najbliżej czasu rzeczywistego będzie rozwiązanie oparte o Change Data Capture. Każda operacja typu create/update/delete do MSSQL będzie skutkować emisją eventu, który możesz obsłużyć np. robiąc zapis do MySQL.
Żeby to zrobić będziesz musiał skonfigurować w Debezium connector do MSSQL w taki sposób by nasłuchiwał na zdarzenia i publikował je na Kafkę, a następinie connectorem dla MySQL zczytywać zdarzenia z Kafki i zapisywać w MySQL. Jak potrzebujesz robić jakieś transformacje po drodze to pewnie będziesz musiał napisać swój własny Listener który odbiera zdarzenia z MSSQL, robi transformację do nowego formatu i zapisuje w MySQL.
Jest to dość skomplikowane ale integracje w czasie rzeczywistym są z natury złożone, więc infrastruktura do ich implementacji musi być odpowiednio skomplikowana.
chciałbym wykonać synchronizacje jednokierunkową z mssql do mysql możliwe jak najbliżej czasu rzeczywistego
Jak najbliżej czasu rzeczywistego będzie rozwiązanie oparte o Change Data Capture. Każda operacja typu create/update/delete do MSSQL będzie skutkować emisją eventu, który możesz obsłużyć np. robiąc zapis do MySQL.
Żeby to zrobić będziesz musiał skonfigurować w Debezium connector do MSSQL w taki sposób by nasłuchiwał na zdarzenia i publikował je na Kafkę, a następinie connectorem dla MySQL zczytywać zdarzenia z Kafki i zapisywać w MySQL. Jak potrzebujesz robić jakieś transformacje po drodze to pewnie będziesz musiał napisać swój własny Listener który odbiera zdarzenia z MSSQL, robi transformację do nowego formatu i zapisuje w MySQL.
Jest to dość skomplikowane ale integracje w czasie rzeczywistym są z natury złożone, więc infrastruktura do ich implementacji musi być odpowiednio skomplikowana.
Jeśli ma być 100% w czasie rzeczywistym, to nie może być mowy o rozwiązaniach pośredniczących (bo pośrednik wprowadza dodatkową awaryjność i opóźnienie). Real-time wymaga synchroniczności operacji, a ta jest raczej niepożądana.
To, co opisałeś, można ogarnąć bez żadnych pośredników firm trzecich. Ot, Trigger na tabeli + Kolejka Service Broker + INSERT/UPDATE/DELETE bezpośrednio na OPENQUERY(mySQL).
A dlaczego chcesz dodawać MySQL i replikować tam? Może postawienie dedykowanej MSSQL i replikacja tam za pomocą mechanizmów replikacyjnych MSSQL -> MSSQL byłoby alternatywą wartą rozważenia?