[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Mysql Datenbanken auf verschiedenen Maschinen in "realtime" abgleichen
[Thread Prev] | [Thread Next]
- Subject: Re: Mysql Datenbanken auf verschiedenen Maschinen in "realtime" abgleichen
- From: Thomas Gross <thomas@xxxxxxxxxx>
- Date: Sat, 24 Sep 2005 12:03:15 +0200
- To: uugrn@xxxxxxxxxxxxxxx
On Sat, 2005-09-24 at 10:54 +0200, Christian Eichert wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Halo, > > FRAGE: Wenn man zwei mysqlserver hat auf zwei entfernten maschinen, wie > gleicht man am besten die Datenbanken mit minimalem Trafic ab. > Die Datenbanken sind teilweise hunderte MB gross. > Was ich will ist eine art "diff" zu machen. so dass praktisch nach jedem > INSERT oder DELETE quasi sofort auch die andere datenbank auf dem > anderen entfernten Server die aktuelle version bekommt. > Und es muss in beide Richtungen gehen. Du kannst den einen Rechner als Master und den anderen als Slave einrichten. Nachzulesen im Mysql Manual und Replikation. Dann schreibt der Master alle Aktionen in ein binaeres logfile und der Slave liest aus diesem Logfile und fuehrt die Aktionen nachtraeglich aus. Das hat den Vorteil, dass du den Slave sogar stoppen kannst und er fuehrt nach dem Restart die anstehenden Aktionen aus. Doku hier: http://dev.mysql.com/doc/mysql/en/replication.html Allerdings geht das nicht in beide Richtungen. Man kann das zwar so einrichten, aber das funktioniert nicht, weil es einige Races geben kann. So was funktioniert vielleicht am Anfang eine gewisse Zeit, geht aber irgendwann schief. Irgendwann wird sowohl auf HOSTA ein Statement abgesetzt, das in eine Tabelle schreibt und einen Primaerschluessel belegt gleichzeitig schaut HOSTB ob dieser Primaerschluessel schon belegt ist, sieht die Aenderung von HOSTA noch nicht, weil sie noch nicht repliziert ist und versucht den selben Primaerschluessel zu benutzen. Wenn das Statement von HOSTA repliziert wird kann es nicht mehr ausgefuehrt werden weil der insert mit einem Duplicate Key error schiefgeht und die Replikation bleibt stehen. Dann kannst du von Hand versuchen die Datenbanken wieder synchron zu kriegen. Was meistens darauf hinauslaeuft den Zustand auf einem der beiden Rechner genau auf den des anderen abzugleichen. Ergo Datenverlust. Da helfen auf Tablelocks usw nicht weiter, weil sie nicht repliziert werden. Ich wuesste keine nicht triviale Applikation die ich guten Gewissens auf einer 2-Wege Replikation laufen lassen wuerde. Ich wuerde einen Rechner fuer schreibende Zugriffe nehmen auf den anderen Rechner replizieren und auf beide lesend zugreifen. Die andere Moeglichkeit die du hast ist die neue NDB Storage Engine von Mysql zu benutzen die Mysql-Clusterung erlaubt. Die hat das oben genannt Problem nicht. http://dev.mysql.com/doc/mysql/en/ndbcluster.html Das habe ich aber noch nie ausprobiert. Diese Loesung wird wohl auch nicht deiner minimaler Traffic Anforderung genuegen. thomas -- Thomas Gross <thomas@xxxxxxxxxx>