Em uma replicação MySQL Master / Slave, o que aconteceria se eu escrevesse no Slave?

17

Muitas questões

  • A entrada Escravo permaneceria até haver uma inserção / atualização / exclusão na tabela no Mestre que poderia afetar o Escravo?

  • Caso contrário, como posso garantir que o Escravo esteja sincronizado com o Mestre daqui para frente (excluindo a entrada Escravo ou copiando essa entrada para o Mestre manualmente)?

  • Mais importante, como faço para detectar se as tabelas estão fora de sincronia?

kfmfe04
fonte
por favor, explique sua pergunta corretamente ...
Abdul Manaf
1
Um relacionamento mestre / escravo não é uma sincronização unidirecional de mestre para escravo, mas não vice-versa? Estou perguntando o que aconteceria se você escrevesse para o escravo nesse tipo de configuração.
kfmfe04

Respostas:

14

Contanto que você não execute nenhuma instrução INSERT / UPDATE / DELETE diretamente no escravo, seu escravo deve estar bem. Caso contrário, a Replicação do MySQL poderá ser interrompida se você INSERIR uma nova linha no mydb.mytable no Slave e, via Replicação, o Slave posteriormente detectar um INSERT de uma linha no mydb.mytable com a mesma PRIMARY KEY. Isso produz o erro 1062 (chave duplicada).

A única maneira de escrever no Slave sem interromper a replicação do MySQL é:

  • O mestre possui bancos de dados db1, db2, db3
  • O Slave está replicando os bancos de dados db1, db2, db3 do Master
  • Você corre CREATE DATABASE db4;no escravo
  • Você faz INSERTs / UPDATEs / DELETEs apenas para db4 no escravo
  • Você não faz INSERTs / UPDATEs / DELETEs apenas para db1, db2, db3 no escravo

Para detectar um Mestre e um Escravo fora de sincronia sem baixar nenhuma ferramenta, escolha qualquer tabela e execute CHECKSUM TABLE em uma tabela no Mestre e a cópia do Escravo da mesma tabela.

EXEMPLO

Se você tiver uma tabela mydb.mytable, execute o comando nela:

mysql> CHECKSUM TABLE mydb.mytable;

Se os valores não voltarem os mesmos, algo está fora de sincronia.

Se você quiser examinar um monte de tabelas a granel, poderá baixar o MAATKIT da Percona. Você precisará de duas ferramentas específicas (a Percona também possui o Percona Toolkit que eles mesmos extraíram do MAATKIT, que agora está sendo promovido mais)

ou

pt-table-checksumexecutará uma CHECKSUM TABLE em todas as tabelas no mestre e no escravo. Você pode configurá-lo para fazer todos os bancos de dados apenas nos específicos.

pt-table-syncpode ser executado em um escravo contra qualquer mesa. Usando as opções --print e --sync-to-master, você pode ver quais instruções SQL precisam ser executadas no Slave para que correspondam perfeitamente ao Master. Essa ferramenta não funciona com tabelas que não possuem uma PRIMARY KEY ou UNIQUE KEY.

Eu uso o MAATKIT há anos. Eu ainda faço. Ainda não testei o Percona Toolkit, mas tenho certeza que ele deve ser da mesma qualidade que o MAATKIT.

RolandoMySQLDBA
fonte
tipo para a resposta detalhada. Eu pensei que tinha mais perguntas, mas acho que suas respostas cobriram todos os casos (a sincronização da tabela de pt parece ser realmente útil).
kfmfe04