it-swarm-eu.dev

Jak změnit předchozí slave MySQL na master a odstranit informace o stavu slave?

Mám konfiguraci master -> slave, kde master selhal. Podařilo se mi obnovit toho starého otroka, aby se stal pánem, a starého-otroka, aby se z něj stal otrokem. Pokuta.

Zdá se, že nemůžu odstranit hlavní informace o starém otroku, který je nyní novým pánem. Chápu:

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

Přečetl jsem hodně dokumentace MySQL , ale stále jsem nenašel způsob, jak vymazat informace o slave od nového mastera. Zkusil jsem:

  1. RESET SLAVE které zřejmě tato nastavení nevymaže. [[Ve skutečnosti odebere master.info soubor, ale ne nastavení paměti. Viz. níže.]]
  2. CHANGE MASTER TO MASTER_Host='', která právě plivá na chybu, protože byla nedávno ukončena.
  3. Kontrola my.cnf který nemá hlavní informace, protože byly přidány programově.
  4. RESET MASTER protože to některé dokumenty mysql doporučily. Tím se resetují pouze protokoly bin.
  5. Vnitřní tabulky MySQL si prohlížím, jestli můžu najít pole, která se mají vymazat.

Jaký je správný způsob, jak toho dosáhnout na MySQL ~ 5.5.9? Díky za pomoc.


Upravit:

Ukázalo se tedy, že RESET SLAVE odstraní master.info soubor jako implicitně @RolandoMySQLDBA. Před odstraněním informací o slave však stále musíte restartovat server.

Existuje nějaký způsob, jak odstranit tyto informace o slave bez museli restartovat mysqld?

V MySQL 5.5.16 a novějších můžete použít RESET SLAVE ALL udělat vše, co RESET SLAVE provede a resetuje parametry připojení z paměti, takže nevyžaduje restart mysqld.

10
Filipe Giusti

Nejrychlejší a nejšpinavější způsob, jak vyčistit informace o slave z instance MySQL

  • Přidat skip-slave-start to /etc/my.cnf pod [mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Odebrat skip-slave-start od /etc/my.cnf

To by mělo udělat za vás !!!

To by bylo nutné, protože podle dokumentace MySQL na RESET SLAVE :

V MySQL 5.5 (na rozdíl od MySQL 5.1 a starších) RESET SLAVE nemění žádné parametry připojení replikace, jako je hlavní hostitel, hlavní port, hlavní uživatel nebo hlavní heslo, které jsou uchovány v paměti. To znamená, že START SLAVE může být vydán bez nutnosti příkazu ZMĚNIT MASTER TO po RESET SLAVE.

Informace o replikaci jsou tedy stále v paměti. Jediným způsobem, jak jít, je restartování mysql.

6
RolandoMySQLDBA

RESET SLAVE následované restartem nevymaže informace o slave, pokud jde o phpmyadmin. Musíte také nastavit CHANGE MASTER TO MASTER_Host=''.

5
Jack

Doporučuji zachovat příkaz skip-slave-start ve vašem konfiguračním souboru (‘v /etc/my.cnf’) pod vaším „mysqld“, aby nedošlo k přepsání master-slave dat. Abych vám dal příklad - když pracujete v cloudovém prostředí, řekněme, že se starý master zhroutí a pak se úspěšně restartuje, když váš poskytovatel vyřeší jakýkoli problém - starý otrok (nyní nový master) se replikuje ze starého masteru, přepíše data před DBA má šanci si to uvědomit.

BTW, to je také relevantní v prostředí bez cloudu. Pokud, řekněme, jiný administrátor vychová starého pána bez koordinace. Dalším důvodem, proč je dobré zachovat příkaz „skip-slave-start“, i když je to slave - žádná automatická replikace, což znamená, že máte větší kontrolu nad prevencí nepředvídatelných výsledků. :)

3
Lena Weber