Replizieren einer entfernten MySQL-Datenbank auf MS SQL Server 2008

10

Ich möchte den Inhalt einer MySQL-Datenbank in eine MS SQL Server 2008-Datenbank replizieren.

Ist das möglich? Kann jemand die Schritte beschreiben, die erforderlich sind, um dies zu erreichen?

Vielen Dank.

Jimmy Collins
quelle

Antworten:

9

Persönlich würde ich in die MS SQL-Methode im Vergleich zum Push von der MySQL-Methode ziehen. Warum? Nun, Windows hat 32-Bit- und 64-Bit-MySQL-ODBC-Treiber bereit und das Einrichten eines Verbindungsservers ist trivial. Ich habe viele MySQL-Server, die mit MS SQL verbunden sind. Außerdem ist die Verbindung zu MS SQL unter Linux / Unix nicht immer gut und Sie können normalerweise nicht alle Funktionen nutzen. FreeTDS hat Einschränkungen; Sie können sie eher früher als später treffen. Warum also nicht einfach überspringen? Dies alles setzt voraus, dass Sie MySQL unter * nix ausführen. Wenn nicht, kommt es etwas näher an 50/50 heran, aber ich würde mich trotzdem für MS SQL entscheiden, da es sich so anhört, als wäre es nicht die "Live" -Datenbank. Daher ist es idealer, die Last für eine ETL oder Verarbeitung zu laden. Die GoldenGate-Lösung klingt interessant, ist aber sicher nicht kostenlos.

In Anbetracht der Tatsache, dass ich diese Art von Szenario mit MySQL- und Oracle-Datenbanken eingerichtet habe, die auf MS SQL repliziert werden, werde ich einige Tipps geben, die für mich am besten funktioniert haben:

  1. Wenn Sie können, geben Sie Ihr Bestes, um festzustellen, wie Sie sicherstellen können, dass Sie nur Delta-Änderungen vornehmen. Zusammenführungsbefehle können dabei helfen. Wenn Sie eine Tabelle abschneiden und dann alles wieder einfügen, wird Ihr Protokoll aufgebläht, die Netzwerkbandbreite verwendet und im Allgemeinen nur Zeit verschwendet.
  2. Wenn Sie mit vielen Daten arbeiten, müssen Sie die Transaktionen aufteilen, um keine massive Protokolldatei zu benötigen. Verwenden Sie explizite Commits oder Checkpoints, wenn Sie einen Schritt erreicht haben, von dem Sie wissen, dass Sie kein Rollback durchführen müssen.
  3. Wenn die MSSQL-Datenbank nur für die Berichterstellung vorgesehen ist, arbeiten Sie dort mit ETL, um den MySQL-Server nicht zu beeinträchtigen. Verwenden Sie eine Staging-Datenbank oder ein Schema + eine Dateigruppe, um die Arbeit zu vereinfachen.
  4. Teilen Sie den Datenimport in Schritte auf. Dies macht es einfach, den Import dort neu zu starten, wo er fehlgeschlagen ist, und / oder Fehler zu beheben. Ein Alles-oder-Nichts-Ansatz wird schnell nervig.
  5. Verwenden Sie nach Möglichkeit Variablen, um die Remote-Datenbank bei der Verwendung von Abfrageplänen und Indizes zu unterstützen. Achten Sie auch darauf, in welcher Art von Transaktionsisolation Sie sich auf der Host-Box befinden und welche Auswirkungen die "Replikations" -Abfragen haben. Sie möchten keine Writer in einer Live-Datenbank blockieren, wenn Sie nur Daten für die Berichterstellung oder Sandbox-Verwendung abrufen.

Hoffe die Tipps helfen!

AndrewSQL
quelle
4

Die gleiche Frage wurde hier in StackOverflow behandelt: Replikation von MySQL nach MSSQL .

Es scheint, dass es einige Problemumgehungen gibt, aber keine sehr einfache Lösung.

Ich glaube, Sie sollten auf jeden Fall versuchen, ein SSIS-Paket zu erstellen, um die erforderlichen Daten aus MySQL DB in MSSQL DB zu importieren. Mit SSIS können Daten aus verschiedenen Quellen importiert werden. Dann sollten Sie in der Lage sein, das Paket mit Windows Task Scheduler oder SQL-Jobs zu planen.

Marian
quelle
3

Wenn Sie mit Replikation Protokollversand oder ähnliches meinen, glaube ich, dass Sie kein Glück haben. Sie können jedoch auf jeden Fall eine MySQL-Datenbank als Verbindungsserver einrichten und Ihr eigenes Replikationsschema erstellen. Am einfachsten ist es, regelmäßige Schnappschüsse aller Tabellen mit Anweisungen zum Abschneiden und Einfügen zu erstellen. Fügen Sie Komplexität hinzu, wie es Ihre Anforderungen erfordern.

Larry Smithmier
quelle
Ich meine, ich möchte, dass eine geplante Aufgabe einmal pro Woche ausgeführt und der gesamte Inhalt von der msqldb auf die SQL Server 2008-Datenbank kopiert wird - ist das möglich?
Jimmy Collins
1
Denken Sie daran, dass das Abschneiden und Abrufen aller Daten jedes Mal sehr langsam sein kann, je nachdem, wie viele Daten betroffen sind, Netzwerklatenz usw. Dies ist definitiv nicht der richtige Weg, wenn Sie kleine oder langsame Netzwerkverbindungen zwischen den beiden Datenbanken haben. Ich versuche immer, eine Methode zu entwickeln, mit der ich Deltas ziehen kann.
AndrewSQL
1
Ich stimme zu, Deltas sind der richtige Weg. Ich kenne nicht genug MySQL, um mit Triggern und schmutzigen Zeilenbits zu sprechen, aber ich bin sicher, dass etwas eingerichtet werden könnte. Auf der SQL Server-Seite ist das Planen eines Jobs unkompliziert.
Larry Smithmier
3

Sie können dazu GoldenGate für MySQL und MS SQL verwenden. Sie würden einfach das GoldenGate-Produkt auf jeder Seite installieren und dann wie bei einer homogenen Replikation vorgehen.

Alternativ können Sie für eine "Snapshot" -Replikation ein Python-Skript (oder ein ähnliches Skript) verwenden, um einfach eine Verbindung zu beiden Datenquellen herzustellen (mit UnixODBC und FreeTDS , um eine Verbindung zu MS SQL herzustellen) und die einseitigen Tabellen SELECTfür jede Zeile durchlaufen INSERTauf dem anderen. Da MSSQL Transaktionen hat und Ihr Ziel ist, können Sie eine Transaktion starten, DELETEalles aus allen Tabellen, die Kopie ausführen, COMMITund es wird sofort angezeigt, wenn verbundene Benutzer auf dem Ziel betroffen sind, es gibt keine Inkonsistenzen (sofern diese nicht vorhanden sind) auf der Quelle natürlich).

Gaius
quelle
Mir war nicht bewusst, dass dies mit GoldenDate möglich ist. Ich muss mehr darüber lesen; danke für das Teilen!
AndrewSQL
Jetzt bietet oracle Unterstützung für dieses Produkt. Oracle hat GoldenGate erworben. Jetzt ist dieses Produkt unter Orakelprodukten.