Jak zmienić poprzednią jednostkę slave MySQL na master i usunąć informacje o statusie slave?

10

Mam konfigurację master -> slave, w której master uległ awarii. Byłem w stanie zresetować starego-niewolnika, aby był mistrzem, a starego-niewolnika od niego. W porządku.

Wydaje mi się, że nie mogę usunąć informacji o masterie ze starego slave, który jest teraz nowym master. Widzę:

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

Przeczytałem dużo dokumentacji MySQL, ale wciąż nie znalazłem sposobu na usunięcie informacji o slave z nowego-master. Próbowałem:

  1. RESET SLAVEco nie wydaje się usuwać tych ustawień. [[Właściwie to usuwa master.infoplik, ale nie ustawienia pamięci. Zobacz poniżej.]]
  2. CHANGE MASTER TO MASTER_HOST='' który po prostu pluje na błąd, ponieważ był przestarzały.
  3. Sprawdzanie, my.cnfktóre nie zawierają informacji podstawowych, ponieważ zostały one dodane programowo.
  4. RESET MASTERponieważ niektóre dokumenty mysql polecały to. To tylko resetuje dzienniki bin.
  5. Grzebię w wewnętrznych tabelach MySQL, aby sprawdzić, czy mogę znaleźć pola do wyczyszczenia.

Jak to zrobić w MySQL ~ 5.5.9? Dziękuję za wszelką pomoc.


Edytować:

Okazuje się, że RESET SLAVEusuwa master.infoplik, jak sugeruje @RolandoMySQLDBA. Jednak nadal trzeba zrestartować serwer przed usunięciem informacji o urządzeniach podrzędnych.

Czy istnieje sposób na usunięcie tych informacji o urządzeniach podrzędnych bez konieczności ponownego uruchamiania mysqld?

Szary - więc przestań być zły
źródło
Powiązane z dba.stackexchange.com/questions/12092/...
Gray - SO przestań być zły

Odpowiedzi:

10

W MySQL 5.5.16 i później, można użyć RESET SLAVE ALL, aby zrobić wszystko, co RESET SLAVErobi i zresetować parametry połączenia z pamięci, w ten sposób, że nie wymaga ponownego uruchomienia mysqld.

Filipe Giusti
źródło
6

Najszybszy i najbrudniejszy sposób na usunięcie informacji o slave z instancji MySQL

  • Dodaj skip-slave-startdo /etc/my.cnf pod[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Usuń skip-slave-startz /etc/my.cnf

To powinno zrobić dla ciebie !!!

Byłoby to konieczne, ponieważ zgodnie z dokumentacją MySQL naRESET SLAVE :

W MySQL 5.5 (w przeciwieństwie do MySQL 5.1 i wcześniejszych) RESETUJ SLAVE nie zmienia żadnych parametrów połączenia replikacji, takich jak host główny, port główny, użytkownik główny lub hasło główne, które są przechowywane w pamięci. Oznacza to, że START SLAVE może zostać wydany bez wymagania instrukcji CHANGE MASTER TO po RESET SLAVE.

Dlatego informacje o replikacji są nadal w pamięci. Ponowne uruchomienie mysql to jedyna droga.

RolandoMySQLDBA
źródło
Dzięki @Rolando. +1 Widziałem to, ale nie próbowałem. Próbuję nie musieć ponownie uruchamiać mysqld, aby to naprawić.
Gray - TAK przestań być zły
Ponadto nie widzę żadnego master.infopliku. Czy to zawsze występuje u „pana” lub „niewolnika”?
Szary - Więc przestań być zły
master.info jest zawsze na serwerze Slave.
Abdul Manaf
5

RESET SLAVEpo ponownym uruchomieniu nie kasuje informacji o slave, jeśli chodzi o phpmyadmin. Musisz także ustawić CHANGE MASTER TO MASTER_HOST=''.

Jacek
źródło
3

Poleciłbym utrzymanie komendy skip-slave-start w pliku konfiguracyjnym („w /etc/my.cnf”) pod „mysqld”, aby uniknąć przesłonięcia danych master-slave. Na przykład: pracując w środowisku chmurowym, powiedzmy, że stary master ulega awarii, a następnie z powodzeniem uruchamia się ponownie, gdy twój dostawca rozwiązuje każdy problem - stary slave (teraz nowy master) replikuje się ze starego master, zastępując dane przed DBA ma szansę to zrealizować.

BTW, dotyczy to również środowiska niebędącego chmurą. Jeśli, powiedzmy, inny administrator przywołuje starego mistrza bez koordynacji. Kolejny problem, dlaczego dobrym pomysłem jest utrzymywanie polecenia „pomiń-slave-start”, nawet jeśli jest to slave - brak automatycznej replikacji, co oznacza, że ​​masz większą kontrolę nad zapobieganiem nieprzewidzianym wynikom. :)

Lena Weber
źródło
Dzięki za odpowiedź @ Lena. To jest dobry pomysł. Przyjrzę się temu.
Szary - Więc przestań być zły