Wie ändere ich einen vorherigen MySQL-Slave in einen Master und entferne Slave-Statusinformationen?


10

Ich habe eine Master -> Slave-Konfiguration, bei der der Master fehlgeschlagen ist. Ich konnte den alten Slave zurücksetzen, um ein Master zu sein, und den alten Master, um daraus einen Slave zu machen. Fein.

Was ich scheinbar nicht tun kann, ist, die Master-Informationen auf dem alten Slave zu entfernen, der jetzt der neue Master ist. Aha:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.1.2.101
              Master_User: replicationSlave
              Master_Port: 3306
              ...
              Slave_IO_Running: No
              Slave_SQL_Running: No

Ich habe viel MySQL-Dokumentation gelesen, aber immer noch keinen Weg gefunden, die Slave-Informationen vom neuen Master zu löschen. Ich habe es versucht:

  1. RESET SLAVEdas scheint diese Einstellungen nicht zu löschen. [[Eigentlich entfernt es die master.infoDatei, aber nicht die Speichereinstellungen. Siehe unten.]]
  2. CHANGE MASTER TO MASTER_HOST='' Das spuckt nur auf einen Fehler, da er vor kurzem veraltet war.
  3. Überprüfen, my.cnfwelche nicht über die Stamminformationen verfügen, da diese programmgesteuert hinzugefügt wurden.
  4. RESET MASTERweil einige MySQL-Dokumente es empfohlen haben. Dadurch werden nur die Bin-Protokolle zurückgesetzt.
  5. Stöbern Sie in den internen MySQL-Tabellen, um zu sehen, ob ich die zu löschenden Felder finde.

Was ist der richtige Weg, um dies unter MySQL ~ 5.5.9 zu tun? Vielen Dank für jede Hilfe.


Bearbeiten:

Es stellt sich also heraus, dass RESET SLAVEdie master.infoDatei entfernt wird, wie @RolandoMySQLDBA impliziert. Sie müssen den Server jedoch noch neu starten, bevor die Slave-Informationen entfernt werden.

Gibt es eine Möglichkeit, diese Slave-Informationen zu entfernen, ohne mysqld neu starten zu müssen?


Antworten:


10

In MySQL 5.5.16 und später, können Sie RESET SLAVE ALLalles tun , was RESET SLAVEfunktioniert und setzen Sie die Verbindungsparameter aus dem Speicher, auf diese Weise es keinen mysqld Neustart erfordert.


6

Der schnellste und schmutzigste Weg, Slave-Informationen aus einer MySQL-Instanz zu löschen

  • Fügen Sie skip-slave-startzu /etc/my.cnf unter hinzu[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • skip-slave-startAus /etc/my.cnf entfernen

Das sollte es für dich tun !!!

Dies wäre notwendig, weil laut MySQL-Dokumentation aufRESET SLAVE :

In MySQL 5.5 (im Gegensatz zu MySQL 5.1 und früheren Versionen) ändert RESET SLAVE keine Replikationsverbindungsparameter wie Master-Host, Master-Port, Master-Benutzer oder Master-Kennwort, die im Speicher gespeichert sind. Dies bedeutet, dass START SLAVE ausgegeben werden kann, ohne dass nach RESET SLAVE eine Anweisung CHANGE MASTER TO erforderlich ist.

Somit befinden sich die Replikationsinformationen immer noch im Speicher. Ein MySQL-Neustart ist der einzige Weg.


Danke @Rolando. +1 Ich habe das gesehen, aber nicht ausprobiert. Ich versuche, mysqld nicht neu starten zu müssen, um dies zu beheben.
Grau - SO hör auf böse zu sein

Außerdem sehe ich keine master.infoDatei. Ist das immer auf einem "Master" oder "Slave"?
Grau - SO hör auf böse zu sein

master.info ist immer auf Slave Server.
Abdul Manaf

5

RESET SLAVEgefolgt von einem Neustart werden die Slave-Informationen für phpmyadmin nicht gelöscht. Sie müssen auch einstellen CHANGE MASTER TO MASTER_HOST=''.


3

Ich würde empfehlen, den Befehl skip-Slave-Start in Ihrer Konfigurationsdatei ('in /etc/my.cnf') unter Ihrer 'mysqld' beizubehalten, um ein Überschreiben der Master-Slave-Daten zu vermeiden. Um Ihnen ein Beispiel zu geben: Wenn Sie in einer Cloud-Umgebung arbeiten, nehmen wir an, ein alter Master stürzt ab und startet dann erfolgreich neu, wenn Ihr Provider das Problem behebt. Der alte Slave (jetzt neuer Master) repliziert vom alten Master und überschreibt zuvor die Daten Der DBA hat die Chance, dies zu realisieren.

Übrigens ist dies auch in Nicht-Cloud-Umgebungen relevant. Wenn zum Beispiel ein anderer Administrator den alten Meister ohne Koordination aufruft. Ein weiteres Problem ist, warum es eine gute Idee ist, den Befehl "Skip-Slave-Start" beizubehalten, auch wenn es sich um einen Slave handelt - keine automatische Replikation, sodass Sie mehr Kontrolle darüber haben, unvorhersehbare Ergebnisse zu verhindern. :) :)


Danke für die Antwort @Lena. Das ist eine gute Idee. Ich werde es untersuchen.
Grau - SO hör auf böse zu sein
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.