Wie deaktiviere ich die MySQL-Replikation vollständig?

64

Ich führe eine Dual-Master-MySQL-Replikation aus und möchte jetzt zu einer einzelnen Datenbank ohne Replikation wechseln. Wie deaktiviere ich die Replikation für beide Datenbanken vollständig?


quelle

Antworten:

81

Um die Replikation mit einem Master-Master-Setup vollständig zu deaktivieren, müssen Sie auf jedem Slave folgende Schritte ausführen:

  1. STOP SLAVE;
  2. RESET SLAVE;(Verwendung RESET SLAVE ALL;für MySQL 5.5.16 und höher)
  3. Bearbeiten Sie die Datei my.cnf und entfernen Sie alle Informationen (falls vorhanden), die sich auf die Optionen "master -..." oder "replicate -..." beziehen. Sie haben möglicherweise nichts in der my.cnf, da die Replikation auch dynamisch eingerichtet werden kann.
  4. Starten Sie mysqld neu.

quelle
Wenn die Replikation dynamisch eingerichtet wird, sollten Schritt 1 und 2 ausreichen.
Tanyehzheng
4
Bis zum Neustart von MySQL werden die alten Replikationsinformationen bei SLAVE STATUSAbfragen gemeldet, auch nachdem der RESET SLAVEBefehl erteilt wurde. Wichtig für Tools zur Überwachung oder zum Remotekonfigurationsmanagement. Bestätigtes Verhalten mit MySQL 5.5.38 unter CentOS 6.5.
Chris Laskey
Ich mache die Schritte, aber warum ist dieser inaktive Slave noch in der Liste der mtop-Befehle? Wie entferne ich es von der Liste?
Scott Chu
18

Ich weiß, dass dies eine alte Frage ist, aber ich habe festgestellt, dass ich auch die Slave-Variablen zurücksetzen muss. Wenn Sie "blah" wie vorgeschlagen verwenden, versucht der Server beim Start, den Server "blah" zu finden.

Wechseln Sie MASTERzuMASTER_HOST='',MASTER_USER='',MASTER_PASSWORD='';

Sie können überprüfen, ob das Gerät kein Slave mehr ist

SHOW SLAVE STATUS \G;
H. Pauwelyn
quelle
5
Das funktioniert nicht mehr. Die Einstellung löst CHANGE MASTER TO MASTER_HOST=''jetzt einen Fehler aus.
Gray
FEHLER 1210 (HY000): Falsche Argumente für MASTER_HOST
Kazimieras Aliulis
Funktioniert für mich unter CentOS 6 (MySQL 5.1), nachdem SHOW SLAVE STATUS ein leeres Set zurückgibt, während es nach einem RESET SLAVE noch einige Master-Informationen anzeigt.
Martijn
Diese Antwort ist für MySQL 5.1-Benutzer immer noch gültig (möglicherweise gibt es sie noch nicht).
RolandoMySQLDBA
12

Auf den Slave-Servern:

  1. Führen Sie "Slave stoppen" aus, um die Replikation zu stoppen.
  2. Führen Sie "reset slave" aus, um dem Slave-Server mitzuteilen, dass er seine Position im vom Master-Server abgerufenen Binärprotokoll vergessen soll.
  3. Fügen Sie "skip-slave-start" zu my.cnf hinzu, um zu verhindern, dass die Replikation startet, wenn Sie MySQL neu starten.

Weder auf dem Master noch auf dem Slave muss MySQL neu gestartet werden. Eine vollständige Dokumentation finden Sie in Abschnitt 19 des MySQL-Referenzhandbuchs .

Es wird empfohlen, die restlichen Replikationseinstellungen beizubehalten, falls Sie die vorherige Konfiguration wiederherstellen möchten. Auf diese Weise müssen Sie nur die Daten verschieben und die Slave-Position zurücksetzen (vergessen Sie nicht, den Skip-Slave-Start zu entfernen), anstatt das gesamte Setup-Tuch neu zu erstellen.


quelle
7

Unabhängig von der MySQL-Version ist der vollständigste Weg, dies zu tun, der folgende

cd /var/lib/mysql
service mysql stop
rm -f master.info relay-*`
service mysql start

Dies muss für die neueste Version funktionieren, da die Replikationseinstellungen für MySQL 5.5 noch im RAM verbleiben.

Ich habe gerade eine ähnliche Frage zu diesem Thema beantwortet: Wie ändere ich einen früheren MySQL-Slave in einen Master und entferne Slave-Statusinformationen?

RolandoMySQLDBA
quelle
6

Das Bearbeiten der Datei my.cnf allein reicht nicht aus, um die Replikation zu deaktivieren. Tatsächlich ist dies nicht mehr die empfohlene Möglichkeit, dies zu aktivieren. Das Einfügen von Einträgen in die Datei my.cnf wirkt sich nur beim nächsten Start aus und verhält sich so, als hätten Sie den Befehl im mysql-Client eingegeben:

mysql> change master to master_host = 'blah', master_user = 'blah', master_password = 'blah' ...;

Beide Methoden erstellen eine Datei im Datenverzeichnis mit dem Namen master.info . Solange diese Datei vorhanden ist, versucht der Server, mit den dort angegebenen Details zu replizieren. Der "RESET SLAVE;" Der in der ersten Antwort aufgeführte Befehl entfernt die Datei master.info (sowie die Datei relay-log.info ). Wie in der ersten Antwort erwähnt, möchten Sie auch sicherstellen, dass diese Konfigurationsinformationen nicht in der Datei my.cnf enthalten sind. Andernfalls wird die Protokollierung beim nächsten Neustart des Servers wieder aktiviert.

Tim
quelle
5

Eine Antwort ist hier:

http://www.oops.net.br/~bac/bam/canopy_repl_setup.htm

* Bearbeiten Sie die MySQL-Konfigurationsdatei: /etc/my.cnf und entfernen Sie die folgenden 7 Zeilen aus dem Abschnitt [mysqld]:

port=3306
log-bin
server-id=1
master-host=10.0.0.2
master-user=server_1_repl
master-password=server_1_passwd
master-port=3306*

Starten Sie MySQL neu.


quelle
4

Ich füge dies zu Harrison Fisk's Antwort hinzu:

Wenn Sie verwendet haben, RESET SLAVE ALL;ist ein Neustart nicht erforderlich.

Außerdem möchten Sie möglicherweise Ereignisse aktivieren, die auf dem Slave deaktiviert wurden:

select * from information_schema.events where status = 'SLAVESIDE_DISABLED';

Für jeden von ihnen:

alter event <event_name> enable;
Franc Drobnič
quelle