Ich möchte, dass der Master die Datenreplikation auf den Slave beendet. Ich weiß, dass ich das mit dem Sklaven machen kann STOP SLAVE;
, aber ich frage mich, ob es im Master eine Möglichkeit gibt, das zu tun.
Eine mögliche Lösung könnte darin bestehen, den Wert server_id
auf 0 zu ändern. In diesem Fall muss mysql im Master neu gestartet werden, damit die Änderungen wirksam werden.
Was ich suche, ist eine Aussage wie STOP MASTER;
.
mysql
replication
HalaKuwatly
quelle
quelle
Antworten:
Es gibt weder einen
STOP MASTER;
Befehl noch einen manuellen Mechanismus vom Master, um die Replikation zu stoppen. Sie müssten zu jedem Slave gehen und Folgendes ausführen:STOP SLAVE;
(Tötet den E / A-Thread und den SQL-Thread ab)STOP SLAVE IO_THREAD;
(Tötet nur den E / A-Thread)Wenn Sie eine dieser Optionen ausführen, erhalten Sie Folgendes:
master.info
Der E / A-Thread kommuniziert mit dem Master. Wenn Sie den E / A-Thread auf der Masterseite mit dem
KILL
Befehl beenden, wird der E / A-Thread auf jedem Slave abgebrochen. Dies könnte die saubere Aufzeichnung von Replikationskoordinaten beschädigen.quelle
Der einfachste Weg, dies online zu tun, besteht darin, alle
REPLICATION SLAVE
Berechtigungen auf dem Master für alle Benutzer zu widerrufen, die über diese verfügen.Dies bietet den zusätzlichen Vorteil, dass Sie selektiv auswählen können, welche Slaves Sie entfernen.
Überprüfen Sie anschließend, ob vorhandene Replikationssitzungen mit vorhanden sind,
SHOW PROCESSLIST
und beenden Sie diese mit demKILL
Befehl (diese werden möglicherweise von selbst gelöscht, nachdem Sie die Berechtigungen widerrufen haben, aber ich vermute, dass dies nicht der Fall ist).Sie müssen bedenken, dass bei diesem Ansatz die Replikation auf dem Slave nicht vollständig gestoppt wird. Dies kann dazu führen, dass der
SLAVE IO_THREAD
Master keine neuen Anweisungen (Abfragen) abrufen kann. Wenn Sie jedoch eventuell Abfragen haben Sie erhalten bereits vom Master (diese werden in Ihrem Relay-Protokoll gespeichert), wurden jedoch noch nicht ausgeführt (Sie können überprüfen, ob Sie Sekunden hinter dem Master haben, um festzustellen, ob dies der Fall ist). Dies verhindert jedoch nicht, dass diese Abfragen dies nicht tun ausführen.quelle
FLUSH PRIVILEGES
, um MySQL anzuweisen, die Berechtigungstabelle im Speicher neu zu laden.FLUSH PRIVILEGES
tun müssen, es sei denn, Sie ändern die Berechtigungen in den MySQL-Tabellen direkt. Wenn Sie Berechtigungen mit REVOKE oder DROP USER löschen, lädt der Server die Grant-Tabellen automatisch neu.stop slave;
undstart slave
; damit es funktioniert!REVOKE
,DROP USER
,DROP SERVER
, undUNINSTALL PLUGIN
nicht bündig nicht die Privilegien Tabellen aus dem Speicher. Nachdem Sie einen dieser Befehle ausgeführt haben, müssen Sie ihn noch ausführenFLUSH PRIVILEGES
.