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:
RESET SLAVE
das scheint diese Einstellungen nicht zu löschen. [[Eigentlich entfernt es diemaster.info
Datei, aber nicht die Speichereinstellungen. Siehe unten.]]CHANGE MASTER TO MASTER_HOST=''
Das spuckt nur auf einen Fehler, da er vor kurzem veraltet war.- Überprüfen,
my.cnf
welche nicht über die Stamminformationen verfügen, da diese programmgesteuert hinzugefügt wurden. RESET MASTER
weil einige MySQL-Dokumente es empfohlen haben. Dadurch werden nur die Bin-Protokolle zurückgesetzt.- 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 SLAVE
die master.info
Datei 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?
quelle
Antworten:
In MySQL 5.5.16 und später, können Sie
RESET SLAVE ALL
alles tun , wasRESET SLAVE
funktioniert und setzen Sie die Verbindungsparameter aus dem Speicher, auf diese Weise es keinen mysqld Neustart erfordert.quelle
Der schnellste und schmutzigste Weg, Slave-Informationen aus einer MySQL-Instanz zu löschen
skip-slave-start
zu /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-start
Aus /etc/my.cnf entfernenDas sollte es für dich tun !!!
Dies wäre notwendig, weil laut MySQL-Dokumentation auf
RESET SLAVE
:Somit befinden sich die Replikationsinformationen immer noch im Speicher. Ein MySQL-Neustart ist der einzige Weg.
quelle
master.info
Datei. Ist das immer auf einem "Master" oder "Slave"?RESET SLAVE
gefolgt von einem Neustart werden die Slave-Informationen für phpmyadmin nicht gelöscht. Sie müssen auch einstellenCHANGE MASTER TO MASTER_HOST=''
.quelle
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. :) :)
quelle