Was würde bei einer MySQL-Master / Slave-Replikation passieren, wenn ich auf den Slave schreibe?


17

Verschiedene Fragen

  • Würde der Slave-Eintrag so lange bestehen bleiben, bis ein Einfügen / Aktualisieren / Löschen der Tabelle auf dem Master erfolgt, das Auswirkungen auf den Slave haben könnte?

  • Wenn nicht, wie kann ich sicherstellen, dass der Slave in Zukunft mit dem Master synchronisiert ist (entweder durch Löschen des Slave-Eintrags oder manuelles Kopieren dieses Eintrags in den Master)?

  • Woran erkenne ich, dass die Tabellen nicht synchron sind?


Bitte erklären Sie Ihre Frage richtig ...
Abdul Manaf

1
Ist eine Master / Slave-Beziehung nicht eine einseitige Synchronisation von Master zu Slave, aber nicht umgekehrt? Ich frage, was passieren würde, wenn Sie dem Sklaven auf diese Weise schreiben würden.
kfmfe04

Antworten:


14

Solange Sie keine INSERT / UPDATE / DELETE-Anweisungen direkt auf dem Slave ausführen, sollte Ihr Slave in Ordnung sein. Andernfalls kann die MySQL-Replikation unterbrochen werden, wenn Sie eine neue Zeile in mydb.mytable auf dem Slave einfügen. Über die Replikation erkennt der Slave später eine Einfügung einer Zeile in mydb.mytable mit demselben PRIMARY KEY. Dies erzeugt den Fehler 1062 (Duplicate Key).

Der einzige Weg, wie Sie in Slave schreiben können, ohne MySQL Replication zu unterbrechen, ist folgender:

  • Der Master verfügt über die Datenbanken db1, db2, db3
  • Der Slave repliziert die Datenbanken db1, db2, db3 vom Master
  • Du rennst CREATE DATABASE db4;auf den Sklaven
  • Sie können INSERTs / UPDATES / DELETEs nur für db4 auf dem Slave ausführen
  • Sie können INSERTs / UPDATES / DELETEs nicht nur für db1, db2, db3 auf dem Slave ausführen

Um zu erkennen, dass ein Master und ein Slave nicht synchron sind, ohne Tools herunterzuladen, wählen Sie eine beliebige Tabelle aus und führen Sie CHECKSUM TABLE für eine Tabelle auf dem Master und die Kopie derselben Tabelle durch den Slave aus.

BEISPIEL

Wenn Sie eine Tabelle haben mydb.mytable, führen Sie den Befehl dagegen aus:

mysql> CHECKSUM TABLE mydb.mytable;

Wenn die Werte nicht gleich sind, ist etwas nicht synchron.

Wenn Sie mehrere Tische gleichzeitig untersuchen möchten, können Sie Perconas MAATKIT herunterfahren. Sie benötigen zwei spezielle Tools (Percona hat auch das Percona Toolkit, das sie selbst aus MAATKIT gespalten haben, das jetzt weiter gefördert wird.)

oder

pt-table-checksumführt eine CHECKSUM TABLE für alle Tabellen auf Master und Slave durch. Sie können es so konfigurieren, dass alle Datenbanken nur auf bestimmten Datenbanken ausgeführt werden.

pt-table-synckann auf einem Slave gegen jeden Tisch ausgeführt werden. Mit den Optionen --print und --sync-to-master können Sie sehen, welche SQL-Anweisungen auf dem Slave ausgeführt werden müssen, damit sie perfekt mit dem Master übereinstimmen. Dieses Tool funktioniert nicht mit Tabellen ohne PRIMARY KEY oder UNIQUE KEY.

Ich benutze MAATKIT seit Jahren. Ich mache immernoch. Ich habe das Percona Toolkit noch nicht ausprobiert, aber ich bin sicher, es sollte von der gleichen Qualität sein wie MAATKIT.


ty für die ausführliche Antwort. Ich dachte, ich hätte mehr Fragen, aber ich denke, Ihre Antworten haben alle Fälle abgedeckt (pt-table-sync scheint wirklich nützlich zu sein).
kfmfe04
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.