Em uma arquitetura de replicação mestre-escravo do MySQL, como você detecta se houve (erroneamente, já que isso nunca deveria acontecer!) Gravações diretas no escravo?
Por enquanto, estou executando este comando no escravo:
tcpdump tcp port 3306 and not host my_master_IP -A | grep -i -e INSERT -e UPDATE -e DELETE
cuja saída, se houver, significa que escreve no escravo, o que é ruim.
Há um método melhor?
A melhor maneira seria habilitar o registro binário no Escravo. Por quê ?
Com o registro binário habilitado no Escravo, cada
INSERT, UPDATE, DELETE
registro nos logs binários vem com o server_id de onde a instrução SQL foi originada.E se log-slave-updates estivesse ativado?
Se você tiver log-slave-updates habilitados no Slave, cada
INSERT, UPDATE, DELETE
do Master vem com o server_id do Master . Se alguma escrita foi executada diretamente no Slave, você terá que separar os comandos.EXEMPLO : suponha que o server_id do Master seja 10 e o server_id do Slave seja 20. Agora, digamos que você tenha esses logs binários no Slave:
Você pode separar os comandos do Mestre dos comandos do Escravo assim:
Em seguida, você examina
Slave_Commands.sql
para ver quais comandos foram executados e quando.E se log-slave-updates fosse desabilitado?
Isso seria melhor porque os logs binários no Slave nunca devem aumentar de tamanho em um Slave, a menos que alguém ou algo seja executado
INSERTs, UPDATEs, DELETEs
localmente.EXEMPLO : Digamos que você correu
RESET MASTER; SHOW BINARY LOGS;
no Slave. Para o MySQL 5.6, você deve ver isto:Deste ponto em diante, se os logs binários mudarem de tamanho, isso informa rapidamente que alguém ou algo foi executado
INSERTs, UPDATEs, DELETEs
localmente. A seguir, você correEm seguida, você examina
Local_Commands.sql
para ver quais comandos foram executados e quando.