PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mysql Replikation



Huhn Hur Tu
21.04.10, 09:53
Hallo, nach folgender Anleitung habe ich eine Master / Master Replikation verwirklicht und das funktioniert auch soweit.

http://www.howtoforge.de/howto/einrichten-von-master-master-replikation-mit-mysql-5-auf-debian-etch/

Jetzt bin ich aber am testen und auf folgendes gestossen.

2 Maschinen mit Debian 5, beide MySQL Master und Slave
Server 1 und Server 2

Wenn ich jetzt auf beiden Servern den Slave und somit die replikation stoppe und auf Server2 z.B.: eine Tabelle loesche dann auf der gleichen Maschine (Server2) den slave wieder starte sollte doch die Tabelle wieder da sein da Server2 von Server1 der ja der Master in der geschichte ist. Doch leider ist es so dass nachdem ich nun auch noch auf Server 1 den Slave starte passiert nichts.
Wenn ich auf einer seite etwas loesche iust es auch auf beiden Servern weg, also Replikation funktioniert.
Hab eich etwas falsch verstanden oder macht das Ding Mist.

Auf Server2 im Binlog stehen die 2 drop_table Ereignisse, bei Server1 nicht.
mysql.log und mysql.err und /var/log/messages haben keine Einträge zu dem Vorgang.

Gruss Stefan

marce
21.04.10, 09:57
Nein, die Tabelle kommt nicht wieder - du löscht Sie auf dem Master des anderen - also wird das löschen auf den Slave repliziert.

S1 ist Master von S2
S2 ist Master von S1

-> Du löschst auf S2 -> Replikation auf S1
auf S1 machst _Du_ nichts - also wird auch nichts auf S2 repliziert.

das mal grob, bei Bedarf kann ich das gerne noch etwas genauer ausführen...

Huhn Hur Tu
21.04.10, 10:47
Da bin ich doch etwas verwirrt:ugly:, sollte nicht der Datenbestand syncronistert werden??? oder werden nur Aktionen während dem Betrieb???.
Ich verstehe es so dass der Slave die Daten des Masters bekommt und wenn während der Abwesenheit des Slaves Daten verändert werden, übernimmt der Slave die Daten vom Master und nicht umgekehrt.

Wenn jedoch der Slave nicht automatisch die Daten des Masters übernimmt, wie löse ich dann diese Splitbrainsituation auf???


Gruss Stefan

marce
21.04.10, 10:57
Moment...

Synchronisiert werden sollte auch das, was passiert, wenn einer der beiden nicht läuft. Eben dann, wenn die Synchronisation wieder getartet wird.

Also:
Sync. off, S1: drop table, sync on: auf S2 wird die Tabelle auch gedroppt.

Wenn das nicht geht - dann läuft Deine Repl. nicht sauber.

Was Du oben aber beschrieben hast ist: Sync off, S2 drop table, sync on - und dann "erwartest" Du, daß die table auf S2 wieder da ist, da er ja Slave von S1 ist.
Das passiert nicht. Oder verstehe ich da was falsch, was bei Dir passiert?

Huhn Hur Tu
21.04.10, 11:32
Ich habe ja bei beiden den Slave gestoppt, also keine Replikation. Dann den Slave dort gestartet wo ich die tabelle gedropt habe, also sollte der Master die fehlende tabelle wieder ersetzen, aber eben dies funzt nicht.

Gruss Stefan

marce
21.04.10, 11:35
Nein, das soll er eben nicht.

bei einer Master-Master-Replikation sind beide Server Master - aber auch beide Slave.

Wenn Du auf einem Server eine Tabelle droppst, so machst Du das "sozusagen" im Master-Prozess. Der drop wird also auf den 2. Server gesynct.

Das kann übrigens zu lustigen Effekten führen, wenn die Replikation wegbricht und in beiden Servern weiter Schreibzugriffe laufen, da die dann zu Deadlocks führen können, die dafür sorgen, daß die Replikation nicht mehr aufgenommen werden kann...

Huhn Hur Tu
21.04.10, 12:20
Gut soweit klar.
Das heisst wenn ich beide Slave stoppe und sagen wir auf server2 Aktualisierungen einspiele, dann auf server1 den slave wieder aktiviere holt sich der Server1 Slave nicht die Daten von Server2 Master????
Denn Master ist eine Kiste nur, wenn eine andere Seite den Slave macht, oder?
Wenn der Slave sich dann die Daten von Master holt wie synce ich dann nen Splitbrain?


Gruss Stefan confused:ugly:

marce
21.04.10, 12:24
Gut soweit klar.
Das heisst wenn ich beide Slave stoppe und sagen wir auf server2 Aktualisierungen einspiele, dann auf server1 den slave wieder aktiviere holt sich der Server1 Slave nicht die Daten von Server2 Master????
Doch, sollte er.

Änderungen auf S1 werden nach S2 repliziert.
Änderungen auf S2 werden nach S1 repliziert.

Anders gesagt: Master replizieren lokal gemachte Änderungen auf ihre(n) Slave(s).
Änderungen auf Servern, die _nur_ Slave sind führen zu Problemen.


Denn Master ist eine Kiste nur, wenn eine andere Seite den Slave macht, oder?
Ohne einen Slave gibt es keinen Master.


Wenn der Slave sich dann die Daten von Master holt wie synce ich dann nen Splitbrain?
wie meinen?

Huhn Hur Tu
21.04.10, 13:31
Splitbrain, Nodes mit verschiedenen Datenbeständen.

Gerade getestet.

S1 und S2 stop slave.
S2 drop Table 123
S2 start slave
S2 holt sich nicht Table 123 von S1.

S1 Start slave, table 123 wegrepliziert auf S1

Kann es sein dass nur Änderungen und nicht differenzen Repliziert werden?


Gruss Stefan

marce
21.04.10, 13:45
Kann es sein dass nur Änderungen und nicht differenzen Repliziert werden?
exakt.

es wir sozusagen der SQL-Befehl auf den 2. Server übertragen und dort ausgeführt.

Huhn Hur Tu
21.04.10, 13:50
Jetzt bin ich ein Stück schlauer als vorher, danke

Gruss Stefan