it-swarm.com.de

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

Verschiedene Fragen

  • Würde der Slave-Eintrag so lange bestehen bleiben, bis die Tabelle auf dem Master eingefügt/aktualisiert/gelöscht wird, was sich auf den Slave auswirken könnte?

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

  • Wie erkenne ich vor allem, dass die Tabellen nicht synchron sind?

17
kfmfe04

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 ein INSERT einer Zeile in mydb.mytable mit demselben PRIMARY KEY. Dies erzeugt den Fehler 1062 (doppelter Schlüssel).

Die einzige Möglichkeit, in Slave zu schreiben, ohne die MySQL-Replikation zu unterbrechen, ist folgende:

  • Der Master verfügt über die Datenbanken db1, db2, db3
  • Der Slave repliziert die Datenbanken db1, db2, db3 vom Master
  • Sie laufen CREATE DATABASE db4; auf dem Slave
  • Sie führen INSERTs/UPDATEs/DELETEs nur für db4 auf dem Slave aus
  • Sie führen INSERTs/UPDATEs/DELETEs nicht nur für db1, db2, db3 auf dem Slave aus

Um festzustellen, dass ein Master und ein Slave nicht synchron sind, ohne Tools herunterzuladen, wählen Sie eine Tabelle aus und führen Sie CHECKSUM TABLE für eine Tabelle aus auf der Master- und der Slave-Kopie derselben Tabelle.

[~ # ~] Beispiel [~ # ~]

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

mysql> CHECKSUM TABLE mydb.mytable;

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

Wenn Sie eine Reihe von Tabellen in großen Mengen untersuchen möchten, können Sie Perconas MAATKIT herunterladen. Sie benötigen zwei spezielle Tools (Percona hat auch das Percona Toolkit, das sie selbst aus MAATKIT herausgegabelt haben, das jetzt mehr beworben wird).

oder

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

pt-table-sync kann auf einem Slave für jede Tabelle 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, denen ein PRIMARY KEY oder ein EINZIGARTIGER KEY fehlt.

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

14
RolandoMySQLDBA