none
Replikation von SQL Server 2008 nach MySQL 5.1 RRS feed

  • Frage

  • Hallo,

    ich versuche gerade Daten von einer SQL Server 2008-Datenbank in eine MySQL 5.1-Datenbank zu bekommen. Ich dachte mir, dass vielleicht Replikation funktionieren könnte, komme allerdings nicht weiter.

    Zuallererst habe ich getestet, ob ich mich überhaupt vom SQL Server- zur MySQL-Instanz verbinden kann, um dort Befehle auszuführen. Das habe ich über einen Linked Server gemacht. Funktioniert auch. INSERT, UPDATE, DELETE, SELECT und CALL-Befehle klappen alle einwandfrei. Ich habe dafür nur vorher eine ODBC System Data Source erstellen müssen und diese dann eben beim Ausführen von sp_addlinkedserver angeben müssen.

    Nun ist ja meine Aufgabe die Daten von Tabellen zwischen der SQL Server- und MySQL-Instanz synchron zu halten. Da würde meiner Meinung nach Replikation passen, allerdings weiß ich nicht, wie ich die einrichten soll. Ich denke mit einer Replikation von SQL Server nach SQL Server komme ich klar. Welche Dinge muss ich allerdings in meinem Fall beachten, oder ist eine solche Replikation nicht möglich?

    Gibt es neben Replikation eine andere Methode, die man hier in Betracht ziehen könnte? Wie würdet ihr das machen?

    Danke für eure Zeit.

    Donnerstag, 20. Januar 2011 15:47

Antworten

  • Hallo Charles,
    ich denke, hier werden als heterogene Systeme nur Oracle und IBM DB2 unterstützt:
    http://msdn.microsoft.com/de-de/library/ms151835.aspx
    Integrieren heterogener Daten

    Es gibt aber Tools von Drittanbietern, die eine Synchronisation erlauben:
    http://www.dbconvert.com/convert-mssql-to-mysql-sync.php
    DBSync for MS SQL & MySQL
    (Diese Seite gibt es auch auf  deutsch, aber ohne Umlaute ;-) )

    Alternativ könntest Du Dir über Trigger eine eigene Protokollierung der Änderungen schreiben, und diese regelmässig (z. B. alle 5 Minuten) per Prozedur oder SSIS auf dem MySQL-Server nachvollziehen. Damit wären die Systeme entkoppelt und ein Ausfall/Schwächeln von MySQL bzw. eine Unterbrechung der Verbindung würde den SQL Server nicht belasten.

    Wichtig wäre noch zu wissen, welche Menge an Änderungen zu erwarten ist, welche Bandbreite dafür zur Verfügung steht, bzw. wie groß die Datenmenge insgesamt ist.

    Einen schönen Tag noch,
    Christoph


    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu

    Freitag, 21. Januar 2011 07:47
  • Meinst du, mit beispielsweise einem Insert-Trigger das einfügen eines neuen Kunden lediglich zu protokollieren und das Insert selbst über ein SSIS-Paket zu machen, das vielleicht alle fünf Minuten ausgeführt wird? Wieso kann ich das Insert in die MySQL-DB nicht direkt über den Insert-Trigger machen?

    Das kannst Du schon und es wird auch funktionieren ... solange die MySQL-DB erreichbar ist. Ist sie es nicht, schlägt der Trigger fehl, es gibt ein Rollback und keiner kann mehr Daten in der MS SQL DB bearbeiten. Von daher ist ein regelmäßiger Prozess, der die Änderungen überträgt der bessere weil sicherer Weg.


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 21. Januar 2011 12:21

Alle Antworten

  • Hallo Charles,

    kennst Du schon den Artikel How do I... Set up replication between Microsoft SQL Server 2000 and MySQL?, vielleicht hilft Dir das weiter oder gibt Anregungen zur Lösung.


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 21. Januar 2011 07:35
  • Hallo Charles,
    ich denke, hier werden als heterogene Systeme nur Oracle und IBM DB2 unterstützt:
    http://msdn.microsoft.com/de-de/library/ms151835.aspx
    Integrieren heterogener Daten

    Es gibt aber Tools von Drittanbietern, die eine Synchronisation erlauben:
    http://www.dbconvert.com/convert-mssql-to-mysql-sync.php
    DBSync for MS SQL & MySQL
    (Diese Seite gibt es auch auf  deutsch, aber ohne Umlaute ;-) )

    Alternativ könntest Du Dir über Trigger eine eigene Protokollierung der Änderungen schreiben, und diese regelmässig (z. B. alle 5 Minuten) per Prozedur oder SSIS auf dem MySQL-Server nachvollziehen. Damit wären die Systeme entkoppelt und ein Ausfall/Schwächeln von MySQL bzw. eine Unterbrechung der Verbindung würde den SQL Server nicht belasten.

    Wichtig wäre noch zu wissen, welche Menge an Änderungen zu erwarten ist, welche Bandbreite dafür zur Verfügung steht, bzw. wie groß die Datenmenge insgesamt ist.

    Einen schönen Tag noch,
    Christoph


    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu

    Freitag, 21. Januar 2011 07:47
  • Also es handelt sich insgesamt um vielleicht 12000 Datensätze, welche die View zurückgibt. In der View selbst wird auf 5 Tabellen zugegriffen. Das Ganze ist also recht überschaubar. Die Initialisierung betrifft also 12000 Datensätze. Später kann man mit ca. 3 neuen Datensätzen täglich rechnen und vielleicht täglich 30 Updates, die übertragen werden müssen.

    Wenn man den Linked Server (der ja bereits super funktioniert) verwendet, kann ich das alles schon über Trigger realisieren, deswegen denke ich darüber nach das so zu machen.

    Meinst du, mit beispielsweise einem Insert-Trigger das einfügen eines neuen Kunden lediglich zu protokollieren und das Insert selbst über ein SSIS-Paket zu machen, das vielleicht alle fünf Minuten ausgeführt wird? Wieso kann ich das Insert in die MySQL-DB nicht direkt über den Insert-Trigger machen?

    Danke für eure Zeit :)

    Freitag, 21. Januar 2011 12:08
  • Meinst du, mit beispielsweise einem Insert-Trigger das einfügen eines neuen Kunden lediglich zu protokollieren und das Insert selbst über ein SSIS-Paket zu machen, das vielleicht alle fünf Minuten ausgeführt wird? Wieso kann ich das Insert in die MySQL-DB nicht direkt über den Insert-Trigger machen?

    Das kannst Du schon und es wird auch funktionieren ... solange die MySQL-DB erreichbar ist. Ist sie es nicht, schlägt der Trigger fehl, es gibt ein Rollback und keiner kann mehr Daten in der MS SQL DB bearbeiten. Von daher ist ein regelmäßiger Prozess, der die Änderungen überträgt der bessere weil sicherer Weg.


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 21. Januar 2011 12:21
  • Super, jetzt weiß ich wo ich ansetzen kann :)

    Danke für eure Antworten.

    Freitag, 21. Januar 2011 15:38