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:
RESET SLAVE
que parece não limpar essas configurações. [[Na verdade, ele remove omaster.info
arquivo, mas não as configurações de memória. Ver abaixo.]]CHANGE MASTER TO MASTER_HOST=''
que cospe em um erro desde que foi preterido recentemente.- Verificação
my.cnf
que não possui as informações mestras desde que foram adicionadas programaticamente. RESET MASTER
porque alguns documentos do mysql o recomendaram. Isso apenas redefine os logs do compartimento.- 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 SLAVE
remove o master.info
arquivo 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?
fonte
Respostas:
No MySQL 5.5.16 e posterior, você pode
RESET SLAVE ALL
fazer tudo o queRESET SLAVE
faz e redefinir os parâmetros de conexão da memória, desta forma, não requer uma reinicialização do mysqld.fonte
A maneira mais rápida e suja de limpar informações de escravos de uma instância do MySQL
skip-slave-start
ao /etc/my.cnf em[mysqld]
service mysql stop
rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
service mysql start
skip-slave-start
do /etc/my.cnfIsso deve bastar para você !!!
Isso seria necessário porque, de acordo com a documentação do MySQL sobre
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.
fonte
master.info
arquivo. Isso sempre existe em um "mestre" ou "escravo"?RESET SLAVE
seguido por uma reinicialização não limpa as informações do escravo no que diz respeito ao phpmyadmin. Você também precisa definirCHANGE MASTER TO MASTER_HOST=''
.fonte
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. :)
fonte