Minha configuração de replicação do MySQL é pela Internet. Mestre está em IP público.
Se eu parar o serviço mysql no mestre, imediatamente uma mensagem de erro é lançada no escravo. E quando inicio o serviço, o escravo está se conectando imediatamente ao mestre e a replicação está acontecendo bem.
Mas se a porta estiver desativada no IP público, nenhum erro será lançado no log do escravo e mostrado como sucesso da conexão, mas os dados não serão replicados do mestre para o escravo. E se a porta estiver habilitada para IP público, ela será exibida como sucesso na conexão e os dados não serão replicados do mestre para o escravo.
Até que eu reinicie o escravo, os dados não serão replicados do mestre para o escravo. Depois de reiniciar o escravo, tudo corre bem.
Posso saber qual é o motivo de não ser replicado.
E existe alguma maneira de saber o status do mestre do escravo, quando esse tipo de comportamento ocorre.
Também existe alguma opção para parar o escravo quando a porta mestre está desativada.
Por favor me ajude nisso.
Estou usando o MySQL versão 5.0.24.
O problema básico decorre do IO Thread do Slave. Às vezes, ele tem o péssimo hábito de se fazer de bobo e não checar ou fazer ping no master.
A replicação semi-síncrona do MySQL 5.5 permite que o próprio master expire e retorne à replicação assíncrona . Escravos executando replicação semissíncrona devem ter um IO Thread mais sensível agora.
Em relação à sua situação particular, você está usando o MySQL 5.0.24 ??? Essa é uma versão muito antiga. Existem dois relatórios de bug ( Bug1 e Bug2 ) discutindo isso.
Apenas me dei conta de que você fez essa pergunta antes e o DTest respondeu . Dando crédito onde o crédito é devido, os relatórios de bug vieram de sua resposta.
Seria bom ser informado quando o IP Público estiver sendo desabilitado do acesso Escravo. Dessa forma, você pode executar
STOP SLAVE;
o escravo com antecedência.Você também perguntou se existe uma maneira de saber o status do mestre do escravo, quando esse tipo de comportamento ocorre.
Aqui está um típico
SHOW SLAVE STATUS\G
Por favor observe o seguinte:
Master_Log_File
cujo último SQL foi copiado pela última vez para retransmitir logsRelay_Master_Log_File
cujo SQL foi executado pela última vez a partir dos logs de retransmissãoSe nenhum desses valores estiver se movendo, isso pode significar que todo o SQL foi processado ou que o escravo está processando uma instrução SQL no thread SQL que veio da posição
Exec_Master_Log_Pos
do Master LogRelay_Master_Log_File
.Agora, olhe para
Relay_Log_Space
. Esse número representa a soma total de todos os tamanhos de arquivo para todos os logs de retransmissão. SeSlave_IO_Running
for Sim eRelay_Log_Space
não estiver mudando, verifique o mestre executandoSHOW MASTER STATUS;
. Deve gostar de algo assim:Se o Master (File,Position)
SHOW MASTER STATUS;
estiver além do Slave (Master_Log_File,Read_Master_Log_Pos) deSHOW SLAVE STATUS\G
, então o IO Thread no Slave está morto para intenções e propósitos, mesmo se Slave_IO_Running for Yes.