Ich habe kürzlich eine Systemadministratorposition übernommen und eine Gruppe von 20 (oder so) Servern verwaltet. Eine Sache, mit der ich mich vorher nicht befasst habe (außer in einer Testsituation), ist die Einführung eines neuen Slaves in die MySQL-Replikationsfarm.
Grundsätzlich ist die Replikation folgendermaßen eingerichtet:
MS -> SL1 -> SL2 (backup)
| SL3 (reporting)
SB2 SL4 (loadbalanced web slave)
SL5 (loadbalanced web slave)
SL6 (loadbalanced web slave)
SL7 (loadbalanced web slave)
Aber im Grunde ist es ein Master mit zwei Leseslaves (einer nur für die Sicherung), einer für den Hauptlese-Slave (Master wartet, wenn Sie so wollen), mit 6 Slaves dahinter, der für eine zusätzliche Sicherung verwendet wird, 4 Web-Lesevorgänge mit Lastenausgleich Slaves und ein Server für die Berichterstellung.
Ich habe viel online gelesen und angenommen, dass das Hinzufügen eines neuen Slaves zur Umgebung (von SL1) Folgendes wäre:
- Melden Sie sich bei SL2 an:
STOP SLAVE;FLUSH TABLES WITH READ LOCK;- (Kopieren Sie das MySQL-Verzeichnis auf einen neuen Server.)
- nach Abschluss
UNLOCK TABLES;und dannSTART SLAVE;(alles in Ordnung bis zu diesem Zeitpunkt, SL2 kommt wieder online und holt auf) - Stellen Sie sicher, dass die Datenbankstruktur auf dem neuen Server korrekt ist und master.info an der richtigen Stelle zeigt (richtig auf SL1 zeigt).
- Starten Sie MySQL auf dem neuen Server und überprüfen Sie, ob Slave SQL und E / A ausgeführt werden (ja, das ist in Ordnung).
Nach einer gewissen Zeit erhalte ich jedoch doppelte Fehler beim Einfügen von Schlüsseln aus dem Binärprotokoll:
110122 17:01:25 [ERROR] Slave SQL: Error 'Duplicate entry '2011-01-22 17:00:01' for key 'PRIMARY'' on query. Default database: 'thelm_soft'. Query: 'INSERT INTO thm_member_views ( member_view_ts, logged_in_members, non_members ) VALUES ( now(), '27037', '132834' )', Error_code: 1062
110122 17:01:25 [Warning] Slave: Duplicate entry '2011-01-22 17:00:01' for key 'PRIMARY' Error_code: 1062
Ist dies ein Problem mit der Tatsache, dass now () in einer Abfrage ist, die mir der gesunde Menschenverstand sagt, würde Probleme verursachen, wenn die Einfügungen in dieser Tabelle häufig genug wären ??!?! Oder habe ich den Prozess mit der Replikation falsch ausgeführt, dh an einer falschen Protokollposition begonnen?