Kann ein MySQL-Slave gleichzeitig ein Master sein?

17

Ich bin dabei, 2 DB-Server (Master & Slave) auf zwei neue DB-Server (Master und Slave) zu migrieren.

DB1 - Master (Produktion)

DB2 - Slave (Produktion)

DB3 - Neuer Master

DB4 - Neuer Slave

Derzeit habe ich die Replikation eingerichtet als:

DB1 -> DB2
DB3 -> DB4

Damit die Produktionsdaten auf die neuen Server repliziert werden, möchte ich sie "verkettet" haben, damit sie so aussehen:

DB1 -> DB2 -> DB3 -> DB4

Ist das möglich? Wenn ich show master status;unter DB2 (dem Produktions-Slave) arbeite, scheint sich die binlog-Funktion nie zu ändern:

+ ------------------ + ---------- + -------------- + ---- -------------- +
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+ ------------------ + ---------- + -------------- + ---- -------------- +
| mysql-bin.000020 | 98 | | |
+ ------------------ + ---------- + -------------- + ---- -------------- +

Ich bin ein bisschen verwirrt, warum sich die Binlog-Position unter DB2 nicht ändert. Idealerweise ist dies der Master für DB3.

mmattax
quelle

Antworten:

9

Ja, das ist möglich :) Dies nennt man "Master with Relay Slave" -Replikation und es gibt viele Dokumente darüber im Netz.

Ich empfehle Ihnen, sich hier die offizielle Dokumentation anzusehen .

Schauen Sie sich auch diese Folien an . Sie enthalten einige Hinweise zu Replikationstopologien.

Hoffe das hilft.

Marco Ramos
quelle
3

Ja, Sie können MySQL-Server hintereinander schalten und sogar eine zirkuläre Replikation mit zwei oder mehr Computern durchführen. Denken Sie daran, das Binloging auf dem Slave zu aktivieren, der auch als Master fungiert.

pQd
quelle
1
Die zirkuläre Replikation ist unglaublich zerbrechlich. Es ist unter den meisten Umständen schlecht beraten.
Warner
@Warner - Dies war nur ein Beispiel für ein noch komplizierteres Replikationssetup.
pQd
Freunde lassen Freunde MySQL-Server nicht hintereinander schalten.
So
@sjas es sei denn, sie haben einen ganz bestimmten Grund, dies zu tun und die möglichen Folgen eines Kettenbruchs zu verstehen.
pQd
Tut mir leid, aber immer noch nicht. Komplexität verfolgt dich immer später.
So
0

Ja, es ist möglich. Realistisch gesehen benötigen Sie einen neuen Snapshot von DB2, um DB3 zu erstellen. Zu diesem Zeitpunkt können Sie, wenn Sie eine gute Position haben, entweder DB4 oder einen anderen Schnappschuss von DB3 verwenden.

Vergessen Sie nicht, server_idfür jeden Server einen eigenen Wert festzulegen.

Hochleistungsfähiges MySQL ist ein großartiges Buch zum Referenzieren fortgeschrittener MySQL-Administration.

Warner
quelle
DB2 ist derzeit nur ein Slave, aber seine Binlog-Position ändert sich nicht ... Wissen Sie, ob das normal ist?
mmattax
Der Slave (DB2) ist mit dem Master auf dem neuesten Stand, die Binlog-Position ändert sich jedoch nicht. Was muss ich überprüfen?
mmattax
Ja, ich habe bestätigt, dass ich Daten in DB1 ändern kann und sie in DB2 repliziert werden. Die binlog-Position von DB2 ist jedoch dieselbe.
mmattax
Ich denke, DB @ protokolliert keine Slave-Updates, daher ändert sich die Position nicht: dev.mysql.com/doc/refman/5.1/en/…
mmattax
0

Warum nicht einfach DB3 als neuen Slave hinzufügen und dann zum Master hochstufen, wenn Sie bereit sind, den Switch durchzuführen? Dies bietet Ihnen den temporären zusätzlichen Vorteil, mehrere Slaves zu haben und Ihre Ausfallzeiten zu reduzieren oder zu eliminieren.

phuzion
quelle
genau das mache ich ...
mmattax