Digamos que estou configurando um novo slave. Eu começo com um mysqldump depois de executar mysql -e "STOP SLAVE", transfiro e restauro para o novo servidor.
Se eu não capturei o nome do arquivo BINLOG e a posição após STOP SLAVE e antes de executar o mysqldump, o que acontece se eu simplesmente usar um nome de arquivo binlog anterior/mais antigo (verificado para estar presente no mestre e mais antigo que o backup), com um posição de zero?
Parece apenas forçar o novo mestre a reproduzir todos os eventos para o novo escravo, obviamente incluindo uma série de INSERTs, UPDATEs e DELETEs que já foram representados no backup (aqueles que aconteceram durante o período de tempo sobreposto).
Há algo de errado ou arriscado nisso? Existe uma desvantagem além do tempo extra desperdiçado e dos ciclos de CPU (repetindo talvez um dia inteiro de transações sobrepostas)?
eu tenho uma surpresa para você
Cada posição dentro de um log binário é baseada no tamanho do arquivo do log binário a partir do momento em que uma instrução SQL foi escrita.
O que é ainda mais interessante sobre esse conceito é o fato de que o cabeçalho dos logs binários difere na posição inicial (não existe uma posição literal 0)
Estes são os pontos de partida para a replicação do log binário vazio de um mestre
Escrevi sobre isso pela primeira vez em 4 de fevereiro de 2011
Aqui está um curso de ação sugerido
mysqlbinlog
contra esse log de retransmissãoCHANGE MASTER TO
comando no SlaveCHANGE MASTER TO
comando no SlaveEssa é a melhor maneira de minimizar qualquer colisão de dados devido a chaves duplicadas
Só para ter certeza, no Slave adicione isso ao my.cnf
Em seguida, reinicie o mysql. Isso ignorará todas as colisões de chaves duplicadas após a execução
START SLAVE;
. Quando Seconds_Behind_Master atingir 0, remova essa linha e reinicie o mysql no Slave. Tudo em termos de replicação do MySQL deve estar bem a partir daí.Riscos/desvantagens, especialmente se estiver usando replicação baseada em instrução: