Como mudar um escravo anterior do MySQL para mestre e remover as informações de status do escravo?

10

Eu tenho uma configuração master -> slave em que o master falhou. Consegui redefinir o velho escravo para ser um mestre e o velho mestre para escravo dele. Bem.

O que não consigo fazer é remover as informações principais do velho escravo, que agora é o novo mestre. Entendo:

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

Eu li muita documentação do MySQL, mas ainda não encontrei uma maneira de limpar as informações do escravo do novo mestre. Eu tentei:

  1. RESET SLAVEque parece não limpar essas configurações. [[Na verdade, ele remove o master.infoarquivo, mas não as configurações de memória. Ver abaixo.]]
  2. CHANGE MASTER TO MASTER_HOST='' que cospe em um erro desde que foi preterido recentemente.
  3. Verificação my.cnfque não possui as informações mestras desde que foram adicionadas programaticamente.
  4. RESET MASTERporque alguns documentos do mysql o recomendaram. Isso apenas redefine os logs do compartimento.
  5. Vasculhando as tabelas internas do MySQL para ver se consigo encontrar os campos a serem limpos.

Qual é a maneira correta de fazer isso no MySQL ~ 5.5.9? Obrigado por qualquer ajuda.


Editar:

Acontece que RESET SLAVEremove o master.infoarquivo como @RolandoMySQLDBA implícito. No entanto, você ainda precisa reiniciar o servidor antes que as informações do escravo sejam removidas.

Existe alguma maneira de remover essas informações do escravo sem precisar reiniciar o mysqld?

Gray - Então pare de ser mau
fonte
Relacionado a dba.stackexchange.com/questions/12092/…
Gray - SO, deixe de ser mau

Respostas:

10

No MySQL 5.5.16 e posterior, você pode RESET SLAVE ALLfazer tudo o que RESET SLAVEfaz e redefinir os parâmetros de conexão da memória, desta forma, não requer uma reinicialização do mysqld.

Filipe Giusti
fonte
6

A maneira mais rápida e suja de limpar informações de escravos de uma instância do MySQL

  • Adicione skip-slave-startao /etc/my.cnf em[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Remova skip-slave-startdo /etc/my.cnf

Isso deve bastar para você !!!

Isso seria necessário porque, de acordo com a documentação do MySQL sobreRESET SLAVE :

No MySQL 5.5 (diferente do MySQL 5.1 e anterior), RESET SLAVE não altera nenhum parâmetro de conexão de replicação, como host principal, porta principal, usuário principal ou senha mestre, que são retidos na memória. Isso significa que o START SLAVE pode ser emitido sem a necessidade de uma instrução CHANGE MASTER TO após RESET SLAVE.

Assim, as informações de replicação ainda estão na memória. Uma reinicialização do mysql é o único caminho a percorrer.

RolandoMySQLDBA
fonte
Obrigado @Rolando. +1 vi isso, mas não tentei. Estou tentando não ter que reiniciar o mysqld para corrigir isso.
Grey - Então, pare de ser mau
Além disso, não vejo nenhum master.infoarquivo. Isso sempre existe em um "mestre" ou "escravo"?
Gray - Então, pare de ser mau
master.info está sempre no Slave Server.
Abdul Manaf
5

RESET SLAVEseguido por uma reinicialização não limpa as informações do escravo no que diz respeito ao phpmyadmin. Você também precisa definir CHANGE MASTER TO MASTER_HOST=''.

Jack
fonte
3

Eu recomendaria manter o comando skip-slave-start no seu arquivo de configuração ('em /etc/my.cnf') no seu 'mysqld' para evitar qualquer substituição dos dados do mestre-escravo. Para dar um exemplo - ao trabalhar em um ambiente de nuvem, digamos que um antigo mestre trava e reinicia com êxito quando seu provedor corrige qualquer problema - o antigo escravo (agora novo mestre) será replicado a partir do antigo mestre, substituindo os dados antes o DBA tem a chance de perceber isso.

BTW, isso também é relevante em ambientes que não são da nuvem. Se, digamos, outro administrador abrir o antigo mestre sem coordenar. Além disso, outra questão por que é uma boa idéia manter o comando 'skip-slave-start' mesmo se for um escravo - sem replicação automática, o que significa que você tem mais controle sobre a prevenção de resultados imprevisíveis. :)

Lena Weber
fonte
Obrigado pela resposta @Lena. Essa é uma boa ideia. Eu vou dar uma olhada.
Gray - SO parar de ser mal