MySQL - Replikation
Andreas
- programmiertechnik
Hallo zusammen!
Ich hatte weiter unten mal bei einem anderen Thema eine kurze Zwischenfrage zum Thema MySQL Replikation gestellt, was wahrscheinlich kaum einer gelesen hat. Daher die Frage an dieser Stelle:
Was gibt es für Möglichkeiten, eine MySQL DB auf einem 2. Server zu replizieren? D.h. möglichst ständig, zur Not auch durch manuell ausgelöste oder automatische(cron) Synchronisation der Datenbestände.
Außerdem sollte auf beiden Servern Daten geändert werden, und zwar nach vorher definierten Regeln, das sich das definitiv nicht überschneiden wird.
Gibt es da keinen in MySQL implentierten Mechanismus? Leider benutze ich auf der einen Seite Linux, und auf der anderen Win2K.
Eine Idee wäre es, alle Updates, Inserts und Deletes irgendwo zu loggen, und entsprechend auf dem anderen Server ausführen. Nur wie soll ich das genau machen, so rein praktisch? Wie könnte ich dann, so in der Theorie, die Synchronisation programmieren?
Ich hätte also auf dem Linux-Server und auf dem Windows Server jeweils eine Datei, in der die notwendigen SQL-Abfragen stehen. Auf beiden Servern ist Apache(+PHP+PERL) installiert, der jeweils über eine Domain erreichbar ist.
Mit welchem Protokoll würdet Ihr die Daten übertragen, wenn man bedenkt das man auch gleichzeitig auf beiden Servern den mysql-Befehl ausführen muß, um die neuen Daten einzulesen!
Was hättet Ihr für Vorschläge? Ich suche da schon länger nach einer Lösung, komme aber nicht wirklich weiter. Ich hoffe einer von Euch hat nochmal eine zündene Idee ;-)
Viele Grüße
Andreas
Hi Andreas,
Daher die Frage an dieser Stelle:
böser Bube ...
Was gibt es für Möglichkeiten, eine MySQL DB auf einem 2. Server zu
replizieren? D.h. möglichst ständig, zur Not auch durch manuell
ausgelöste oder automatische(cron) Synchronisation der Datenbestände.
Gibt es da keinen in MySQL implentierten Mechanismus?
Bist Du auf die Verwendung von mySQL 3.x angewiesen?
Eine Idee wäre es, alle Updates, Inserts und Deletes irgendwo zu loggen,
und entsprechend auf dem anderen Server ausführen. Nur wie soll ich das
genau machen, so rein praktisch? Wie könnte ich dann, so in der Theorie,
die Synchronisation programmieren?
Wenn Du das richtig machen willst, dann wirst es so komplex, daß Du in
die Gefilder der Implementierung einer eigenen Datenbank kommst.
Es hat schon seine Gründe, daß mySQL 3.x das nicht kann.
Wenn es um viel Geld geht, würde ich eine andere Datenbank empfehlen.
Bei Oracle bin ich ziemlich sicher, daß es Deine Anforderungen erfüllen
könnte.
Ansonsten - warten, bis mySQL 4 stabil wird, und schon mal lesen, was dort
mehr gehen wird:
http://www.mysql.com/doc/R/e/Replication.html
Mit welchem Protokoll würdet Ihr die Daten übertragen, wenn man bedenkt
das man auch gleichzeitig auf beiden Servern den mysql-Befehl ausführen
muß, um die neuen Daten einzulesen!
Schlimmer noch: Was ist, wenn der Befehl auf einer der beiden Seiten
scheitert? Das alles in den Griff zu bekommen ... laß es bleiben.
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.ico" border=0 alt=""> Michael
Hallo!
Bist Du auf die Verwendung von mySQL 3.x angewiesen?
Auf der einen Seite schon!
Ansonsten - warten, bis mySQL 4 stabil wird, und schon mal lesen, was dort
mehr gehen wird:
http://www.mysql.com/doc/R/e/Replication.html
Aber auch in beide Richtungen?
Schlimmer noch: Was ist, wenn der Befehl auf einer der beiden Seiten
scheitert? Das alles in den Griff zu bekommen ... laß es bleiben.
Na das nenn ich mal ne hilfreiche bzw. optimistische Antwort ;-)
Es geht darum, das ich sowas bereits mache! Und zwar wie folgt:
Ich greife von mit einem PHP-Script auf dem Linuxserver gleichzeitig auf die lokale, UND die entfernte Datenbank zu - da es sich nur um 3 Tabellen handelt, habe ich noch eine sync-Tabelle eingefügt, wo ich den Sync-Zeitpunkt logge, überall ist ein mySQL Timestamp drin, und ich generiere mir aus den neuen Einträgen, je nach Höhe der ID(ob neu oder alt) Inserts oder Updates und führe Sie in der entsprechenden DB direkt aus.
Das funtioniert auch, ist aber unter Sicherheitstechnischen Gesichtspunkten nicht wiklich gut gelöst! Daher meine Frage, wie man die Datenübertragung evtl etwas sichern könnte, außerdem will ich nur noch über den jeweiligen Webserver auf die DB zugreifen, der Port soll auf dem Win-Server gschlosen werden. Dazu muß ich halt die Daten erst auf der einen Seute auslesen, dann dei Updates/Inserts zur anderen Seite schicken, da ebenfalls auslesen, die mitgeschickten Statements ausführen, und die gerade ermittelten wieder auf die andere Seite schhicken, und da nochmal ausführen.
Und da wollte ich nur mal hören, ob jemand Tipps für die Umseztung hat, welche Protokoll ich verwenden sollte.
Ich kann mich schemenhaft mal an ein Posting von Sven Rautenberg erinnern, der etwas ähnliches mal mit Datenübertragung per POST-Header gemacht hat. Wie ist das in disem Falle zu bewerten, im Gegesatz zu FTP oder SCP? Kann man die HTTP-Verbindung zwischen 2 Apachen auch SSL-verschlüsseln? Ich dchte nur an diese Lösung, da ich eh über die Apachen auf die DB zugreifen muß! Oder etwa noch nicht? Kann an evtl alle Daten, die nach einem best. Datum geändert wurden per mysqldump bekommen?
Viele Grüße
Andreas
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.ico" border=0 alt=""> gibts nicht?