Aufgrund der One-to-Many-Architektur der MySQL-Replikation müssen Sie einen Replikationsring mit mehreren Mastern haben. Das heißt, jeder repliziert den nächsten in einer Schleife. Für zwei replizieren sie sich gegenseitig. Dies wurde bereits von v3.23 unterstützt.
In einem früheren Ort arbeitete ich, wir haben es mit v3.23 mit einer ziemlich großen Anzahl von Kunden getan, um genau das zu liefern, was Sie verlangen. Wir verwendeten SSH-Tunnel über das Internet, um die Replikation durchzuführen. Wir brauchten einige Zeit, um es zuverlässig zu machen, und mehrere Male mussten wir eine binäre Kopie einer Datenbank zu einer anderen machen (glücklicherweise war keine von ihnen über 2 GB und brauchte auch keinen 24-Stunden-Zugriff). Auch die Replikation in v3 war nicht annähernd so stabil wie in v4, aber selbst in v5 wird es einfach aufhören, wenn es irgendeine Art von Fehler entdeckt.
Um die unvermeidliche Replikationsverzögerung zu berücksichtigen, haben wir die Anwendung so strukturiert, dass sie nicht auf Felder AUTOINCREMENT
angewiesen ist (und dieses Attribut aus den Tabellen entfernt hat). Dies war aufgrund der von uns entwickelten Datenzugriffsebene relativ einfach. Anstatt es für neue Objekte mit mysql_insert_id()
zu verwenden, erstellte es zuerst die neue ID und fügte sie zusammen mit dem Rest der Zeile ein. Wir haben auch Site-IDs implementiert, die wir in der oberen Hälfte der ID gespeichert haben, weil sie BIGINT
s waren. Das bedeutete auch, dass wir die Anwendung nicht ändern mussten, als wir einen Kunden hatten, der die Datenbank an drei Standorten haben wollte. :-)
Es war nicht 100% robust. InnoDB hat gerade etwas an Sichtbarkeit gewonnen, so dass wir Transaktionen nicht einfach verwenden konnten, obwohl wir es in Betracht gezogen haben. So gab es gelegentlich Rennbedingungen, als zwei Objekte versuchten, mit der gleichen ID erstellt zu werden. Dies bedeutete einen Fehler und wir versuchten dies in der App zu melden. Aber es war immer noch ein wichtiger Teil von jemandes Aufgabe, über die Replikation zu wachen und Dinge zu reparieren, wenn es kaputt ging. Wichtig, um es zu beheben, bevor wir zu weit aus der Synchronisation kamen, weil in einigen Fällen die Datenbanken in beide Sites verwendet wurden und würde schnell schwierig werden, wieder zu integrieren, wenn wir einen neu erstellen mussten.
Es war eine gute Übung, ein Teil davon zu sein, aber ich würde es nicht wieder tun. Nicht in MySQL.
Thnx für den Link – Edmhs