Temos um cluster MySQL (v5.1.61) com dois mestres (e dois escravos). Temos uma tabela logs
com uma coluna de chave primária logID
. Esta tabela de log cresce bastante e gostaríamos de excluir os dados dela. Então eu escrevi um script que faz isso. — É seguro executar este script em ambos os mestres? Ele exclui apenas os dados. O que estou querendo saber é o que o módulo de replicação do MySQL fará, se a linha que está prestes a excluir já tiver sido excluída? A replicação será interrompida ou é seguro excluir linhas em ambos os mestres? Importa se usamos replicação baseada em linha ou baseada em instrução?
Exemplo: O script de exclusão de dados de log exclui a linha 123 no mestre A. Ao mesmo tempo, o script exclui a mesma linha no mestre B. Então o mestre B lê seu log de retransmissão e vê: "Devo excluir a linha 123, porque foi apagado no Mestre A e eu sou seu escravo. Vamos deletá-lo... ... ...mas já foi!" — agora o que o Mestre B fará? Ele interromperá a replicação, como se houvesse um erro de chave duplicada? Ou vai pensar "Tudo bem, não preciso fazer nada" e está tudo bem.
Sua pergunta já tem a chave para sua resposta. Depende da replicação baseada em linha ou baseada em instrução.
REPLICAÇÃO BASEADA EM DECLARAÇÃO
Se você executar
DELETE FROM tblname WHERE blahblahblah;
e as linhas correspondentesblahblahblah
não existirem, não é grande coisa. A replicação apenas continuará. Levará muito mais tempo para você perceber seu rascunho de dados no Escravo (ou no seu caso, no Mestre) se houver pequenas diferenças.REPLICAÇÃO BASEADA EM LINHAS
Se você executar
DELETE FROM tblname WHERE blahblahblah;
e as linhas correspondentesblahblahblah
não existirem, isso pode interromper a replicação porque as informações exatas da linha estão incorporadas nos logs de retransmissão no escravo. Espera-se que essa linha exista para que a exclusão aconteça. Existe um código de erro para isso:Você provavelmente verá mensagens de log de erro como estas:
Aqui estão outros links que discutem isso
Para obter mais informações, leia Advantages and Disadvantages of Statement-Based and Row-Based Replication na documentação do MySQL.