Estou montando um master->slave_a->slave_b
relacionamento e tendo um pouco de dificuldade. Atualmente tenho a master->slave_a
replicação funcionando bem.
Cada um dos dois escravos tem exatamente a mesma configuração, exceto o nome do host server-id
. Sempre que tento iniciar o escravo slave_b
, tenho o seguinte erro pop-up:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
Eu realmente não entendo, porque tenho todos os IDs de servidor a milhas de distância 1->2626->2629
(m->s->s).
Estou configurando-os no meu /etc/mysql/conf.d/replication.cnf
arquivo - e parece estar sendo incluído, mas não tenho ideia de como posso verificar qual ID do servidor o mysql está pegando.
Obrigado antecipadamente :) Tom.
O server_id do mestre é registrado em seus logs binários junto com cada consulta executada até a conclusão. Para ver esses valores server_id no log binário, você executa mysqlbinlog em qualquer log binário.
Como Master -> Slave_A funciona bem, aqui está o que você pode fazer para limpar as coisas entre Slave_A e Slave_B:
No Slave_A, execute o seguinte no mysql:
Em Slave_A, execute o seguinte no SO:
No Slave_A, execute o seguinte no mysql:
Isso fará com que Slave_B olhe para os valores corretos para server_id e também restabeleça a Replicação do MySQL.
BTW Você precisa ter certeza de que o log binário está desabilitado no Slave_B, pois não é necessário para um Slave, a menos que Slave_B esteja indo de um Master para algum outro Slave.
No meu caso (master-slave) resolvi deletar este arquivo
e, em seguida, reiniciar o serviço MySQL, quando o serviço MySQL for iniciado, gerará um novo UUID
A solução de Chumillas no Linux se parecia com o seguinte. Todos os comandos foram executados no escravo, sem necessidade de recarregar o banco de dados, sem reinicialização do mestre e todo o processo leva apenas alguns segundos:
Eu estava lutando com esse problema por algum tempo em que o mestre mostra um erro
Master & Slave foram configurados corretamente com diferentes IPs e diferentes "server-id" em my.ini
PROBLEMA:
O SQL_Thread escravo também estava sendo executado no servidor mestre...(Não tenho certeza de como :( )
CORREÇÃO:
execute "parar escravo;" no MESTRE
POST ACTIONS
Verifique se a replicação ainda está funcionando verificando o status do escravo (no SLAVE)
No meu caso, acima corrigiu o problema e a replicação mestre-escravo também funcionou bem depois disso.
Eu enfrentei o problema semelhante com o mesmo erro. A solução foi corrigir o PublicIP ao criar um salve na consulta "CHANGE MASTER TO MASTER_HOST".
O mesmo erro aparece quando você usa o mesmo IP do slave como masterIP ao criar um slave. Assim, o servidor escravo MySql tende a apontar para o mesmo IP do servidor (IP escravo em vez do IP mestre) formando um conflito de mesmo ID do servidor
Remova o auto.cnf copiado do datadir do mestre. Reinicie o mysqld.
Eu tenho o mesmo erro, mas foi miopia da minha parte. O servidor que estou usando agora como escravo já foi o mestre. Então, uma vez que tentei iniciar o escravo, o valor do status 'master_host' do show slave foi padronizado para esse servidor i/p, não para o novo mestre i/p. Então, executei novamente o comando 'change master' adicionando o 'master_host' apontando para o novo mestre. DUH!! Talvez isso possa ajudar alguém no caminho.