Estou recebendo um erro no escravo como:
não foi possível executar o evento Write_rows na tabela mydatabasename.atable; Entrada duplicada '174465' para chave 'PRIMARY', Error_code: 1062; erro do manipulador HA_ERR_FOUND_DUPP_KEY; o log mestre do evento mysql-bin.000004, end_log_pos 60121977
Como estou recebendo atualizações diretamente do mestre, por que isso acontece.
Como podemos lidar com isso de maneira eficaz para que não haja perda de dados no escravo. Não quero configurar toda a replicação novamente para manter a integridade dos dados.
Obrigado..!
Sempre que houver um erro 1062, a tabela usual com o problema é a tabela real que está sendo atualizada na consulta. A consulta deve aparecer na saída de
SHOW SLAVE STATUS\G
Por exemplo, em seu erro, ele diz
Duplicate entry '174465' for key 'PRIMARY'
. Isso indica que você deve procurar o valor174465
na tabela que está fazendo um INSERT ou UPDATE. Se a linha existir, você pode decidir se a execução interrompida da consulta alterará o conteúdo da linha. Se a consulta simplesmente reproduzir exatamente o mesmo conteúdo e você acredita que esse será o caso, você pode executar uma das duas opções:OPÇÃO 1
Ignore o erro, aguarde 5 segundos e visualize o Status do Escravo. Aqui estão os 5 passos para pular um erro
Quando você visualiza o Status do Escravo, aqui está o que esperar
Se Seconds_Behind_Master for NULL
Se Seconds_Behind_Master for um número
OPÇÃO 2
Remova a linha para permitir que a replicação continue
Exclua a linha da tabela no Slave e execute as 4 etapas a seguir para ignorar um erro:
Correndo o risco de soar redundante...
Quando você visualiza o Status do Escravo, aqui está o que esperar
Se Seconds_Behind_Master for NULL
Se Seconds_Behind_Master for um número
E se houver muitos problemas de chave duplicados? Aqui estão alguns dos meus posts anteriores sobre como usar mk-table-checksum do MAATKIT , mk-table-sync , pt-table-checksum , pt-table-sync :
Eu fiz um script como abaixo para resolver este problema:
Crie um script SQL que irá parar o slave e defina
SQL_SLAVE_SKIP_COUNTER
para então iniciar o slave.então :
Dessa forma, abordei o conflito de replicação de escravos. Isso pode ajudar a todos.
Na minha situação, as coordenadas de replicação do escravo foram quebradas e consertei isso redefinindo meu escravo e conectando meu escravo ao mestre por novas coordenadas sem perda de dados. Primeiro, verifique se o seu slave gtid_slave_pos é diferente de outros slaves ou master gtid_current_pos:
Então:
Você pode encontrar mais detalhes aqui https://mariadb.com/kb/en/library/using-mariadb-replication-with-mariadb-galera-cluster-configuring-mariadb-r/#start-replication-on-the-new -escravo
O script a seguir continuará ignorando o contador global até que o erro de replicação seja corrigido. O erro de replicação geralmente ocorre quando o tempo de despejo do mestre difere da posição do mestre obtida.
Tente este script:
Nota: Para adicionar senha, modifique o script como este: