Replikacja zdalnej bazy danych MySQL na MS SQL Server 2008

10

Chcę zreplikować zawartość bazy danych MySQL do bazy danych MS SQL Server 2008.

czy to możliwe? Czy ktoś może nakreślić kroki wymagane do osiągnięcia tego?

Dzięki.

Jimmy Collins
źródło

Odpowiedzi:

9

Osobiście wciągnęłbym się w metodę MS SQL vs. push z metody MySQL. Dlaczego? Cóż, Windows ma gotowe 32-bitowe i 64-bitowe sterowniki ODBC MySQL, a konfiguracja połączonego serwera jest banalna. Mam wiele serwerów MySQL połączonych z MS SQL. Ponadto połączenie z MS SQL z Linuksa / Unixa nie zawsze jest świetne i zazwyczaj nie jesteś w stanie korzystać ze wszystkich funkcji. FreeTDS ma ograniczenia; możesz trafić je wcześniej niż później, więc dlaczego nie pominąć. To wszystko zakłada, że ​​używasz MySQL na * nix. Jeśli nie, zbliża się nieco do 50/50, ale nadal wybrałbym ciągnięcie z MS SQL, ponieważ brzmi to tak, jakby nie była to „bieżąca” baza danych, więc obciążenie dla dowolnego ETL lub przetwarzania jest bardziej idealne. Rozwiązanie GoldenGate brzmi interesująco, ale jestem pewien, że nie jest darmowe.

Biorąc pod uwagę, że skonfigurowałem taki scenariusz z bazami danych MySQL i Oracle replikującymi się do MS SQL, podam kilka wskazówek, które najlepiej dla mnie działały:

  1. Jeśli możesz, postaraj się ustalić, w jaki sposób możesz zapewnić, że wprowadzasz tylko zmiany delta. Polecenia scalania mogą w tym pomóc. Obcinanie tabeli, a następnie wstawianie jej ponownie powoduje nadmuchanie dziennika, wykorzystanie przepustowości sieci i generalnie marnowanie czasu.
  2. Jeśli masz do czynienia z dużą ilością danych, pamiętaj o rozbiciu transakcji, aby nie wymagać dużego pliku dziennika. Używaj wyraźnych zatwierdzeń lub punktów kontrolnych, gdy osiągniesz krok, o którym wiesz, że nie będziesz musiał wycofywać zmian.
  3. Jeśli baza danych MSSQL służy wyłącznie do raportowania, wykonaj tam ETL, aby nie wpływać na serwer MySQL. Użyj bazy danych pomostowej lub schematu + grupa plików, aby ułatwić.
  4. Podziel import danych na etapy. Ułatwia to ponowne uruchomienie importu w przypadku niepowodzenia i / lub rozwiązywania problemów. Podejście „wszystko albo nic” szybko staje się denerwujące.
  5. Tam, gdzie to możliwe, używaj zmiennych, aby pomóc zdalnej bazie danych w planach zapytań i indeksowaniu. Zwróć również uwagę na rodzaj izolacji transakcji na hoście i jaki wpływ będą miały zapytania „replikacyjne”. Nie chcesz blokować programów piszących na aktywnej bazie danych, jeśli tylko pobierasz dane do raportowania lub korzystania z piaskownicy.

Mam nadzieję, że wskazówki pomogą!

AndrewSQL
źródło
4

To samo pytanie zostało rozwiązane w StackOverflow tutaj: Replikacja z MySQL na MSSQL .

Wydaje się, że istnieją pewne obejścia, ale niezbyt łatwe rozwiązanie.

Uważam, że zdecydowanie powinieneś spróbować zbudować pakiet SSIS, aby zaimportować niezbędne dane z MySQL DB do MSSQL DB. SSIS pozwala importować dane z różnych źródeł. Następnie powinieneś być w stanie zaplanować pakiet za pomocą harmonogramu zadań Windows lub zadań SQL.

Marian
źródło
3

Jeśli przez replikację masz na myśli wysyłkę dziennika lub coś w tym stylu, uważam, że nie masz szczęścia. Jednak z pewnością możesz skonfigurować bazę danych MySQL jako serwer połączony i stworzyć własny schemat replikacji. Najprostszym jest wykonywanie okresowych migawek wszystkich tabel za pomocą instrukcji obcinania i wstawiania. Dodaj złożoność zgodnie z wymaganiami.

Larry Smithmier
źródło
Mam na myśli, że chcę, aby zaplanowane zadanie uruchamiało się i kopiowało całą zawartość z msqldb na serwer db SQL Server 2008 raz w tygodniu - czy to możliwe?
Jimmy Collins
1
Pamiętaj, że obcinanie i ciągnięcie wszystkich danych za każdym razem może być bardzo powolne, w zależności od ilości danych, opóźnienia sieci itp. Zdecydowanie nie jest to właściwe, jeśli masz małe lub powolne połączenia sieciowe między dwiema bazami danych. Zawsze staram się wymyślić metodę, która pozwoli mi wyciągać delty.
AndrewSQL,
1
Zgadzam się, delty są właściwą drogą. Nie znam wystarczająco dużo MySQL, aby mówić do wyzwalaczy i brudnych bitów wierszy, ale jestem pewien, że coś można skonfigurować. Po stronie SQL Server planowanie zadania jest proste.
Larry Smithmier,
3

W tym celu możesz użyć GoldenGate dla MySQL i MS SQL . Wystarczy zainstalować produkt GoldenGate z każdej strony, a następnie postępować jak w przypadku jednorodnej replikacji.

Alternatywnie, do „snapshot” replikacji, można użyć Pythona (lub podobnego) skrypt wystarczy podłączyć do obu źródeł danych (z wykorzystaniem unixodbc i FreeTDS aby połączyć się z MS SQL), pętli między stolikami robi SELECTz jednej strony, dla każdego wiersza INSERTna inne. Ponieważ MSSQL ma transakcje i jest twoim celem, możesz rozpocząć transakcję, DELETEwszystko ze wszystkich tabel, zrób kopię, a wtedy COMMITpojawi się natychmiast, jeśli chodzi o połączonych użytkowników w celu, nie będzie żadnych niezgodności (chyba że one istnieją) na źródło oczywiście).

Gajusz
źródło
Nie wiedziałem, że możesz to zrobić za pomocą GoldenDate. Będę musiał przeczytać o tym więcej; dzięki za udostępnienie!
AndrewSQL,
Teraz wyrocznia zapewnia obsługę tego produktu. Oracle nabył GoldenGate. Teraz ten produkt jest objęty produktami Oracle.