Ist es möglich, MySql Replication so einzurichten, dass ein Slave zwei verschiedene Master abhört?
quelle
Ist es möglich, MySql Replication so einzurichten, dass ein Slave zwei verschiedene Master abhört?
Ein mysqld-Prozess kann nicht gleichzeitig zwei verschiedene Master anhören.
Mit dem Befehl CHANGE MASTER TO können Sie nur einen Master als Quelle zum Lesen festlegen.
Um dies zu emulieren, müssten Sie programmgesteuert zwischen den beiden Masters wechseln. Wie machst du das ?
Hier ist die Grundidee
Richten Sie die Replikation von M1 nach S1 und dann von M2 nach S1 wie folgt ein
Jedes Mal, wenn Sie von einem Master zu einem anderen wechseln, müssen Sie zwei Werte von aufzeichnen SHOW SLAVE STATUS\G
Diese beiden Werte stellen die letzte SQL-Anweisung dar, die vom Master stammt und als nächstes auf dem Slave ausgeführt werden soll.
Es gibt eine große Vorsicht: Solange M1 und M2 sich gegenseitig ausschließende Datenbanken aktualisieren, sollte dieser Algorithmus in Ordnung sein.
Ob Sie es glauben oder nicht, ich habe bereits im Mai 2011 eine solche Frage in ServerFault beantwortet. Ich habe tatsächlich erklärt, wie man mit der BLACKHOLE Storage Engine basierend auf dem Buch "High Performance MySQL" einen echten Multimaster / Single Slave emuliert.
Rolandos Lösung hat viele Einschränkungen. Der erste, der ein Replikat-Stream ist, wird notwendigerweise nicht repliziert, während der andere funktioniert. Dies wird Ihnen Zeiträume geben, in denen Ihr Sklave nicht synchron ist. Sie müssen jetzt einen heiklen Balanceakt spielen, um sicherzustellen, dass jeder genug Zeit hat, um aufzuholen, wenn er an der Reihe ist.
Wie beschrieben müssen Sie auch den Buchhalter der Protokollpositionen spielen, um wieder zu wechseln. Dies scheint wirklich nur fehlerhaft zu sein, da das Fenster für fehlende oder inkonsistente Daten geöffnet wird oder sogar die Replikation unterbrochen wird, wenn ein Fehler auftritt (entweder durch einen Fehler "nur um eins" in der Protokollposition).
Ich würde empfehlen, nur mehrere MySQL-Instanzen auszuführen. Nichts hindert Sie daran, zwei oder mehr MySQLs auf demselben Computer auszuführen. Sie können natürlich nicht beide am selben Port arbeiten. Ich sehe dies jedoch nicht wirklich als Problem an, da Sie in jedem Client und jeder Bibliothek etwas anderes als 3306 angeben können.
Geben Sie einfach port = 3307 an (oder was auch immer in einer der .cnf-Dateien).
Sie sollten auch darauf achten, dass die individuell konfigurierten Pufferpools und andere Speicherkonfigurationen nicht im Widerspruch zueinander stehen. Dies ist jedoch ein Vorteil, da Sie diese Einstellungen genauer auf die spezifischen Anforderungen der einzelnen Datenbanken abstimmen können, die repliziert werden.
Auf diese Weise werden nur zwei Replikationsströme auf demselben Server ausgeführt. Niemals zurück, keine Buchhaltung erforderlich, kein "Austausch" -Skript erforderlich.
quelle
Fan-In (Multi-Source-Replikation) wird von MySQL 5.7 unterstützt.
Eine Labs-Version finden Sie hier: http://labs.mysql.com/
quelle
MariaDB, die als Ersatz für MySQL verwendet werden kann, kann verwendet werden. Es unterstützt es ab Version 10.2
Das Problem mit der Unterstützung von MySQL 5.7 ist die Notwendigkeit von GTID, was bedeutet, dass der Master ebenfalls geändert werden muss, im Fall von MariaDb ist dies nicht der Fall.
Beispiel / HowTo-Link: http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100
quelle