Tivemos a replicação de mestre para mestre com dois nós de nó A e B, ambos em ambiente virtual. Inicialmente, houve uma interrupção (problema de espaço em disco) no nó A e a replicação foi interrompida. O tráfego no nível do aplicativo foi desviado para o nó B e realocado o armazenamento de dados do nó A e disponibilizado espaço.
O nó A foi iniciado com sucesso e ativado. A replicação foi iniciada e ocorreu um erro no nó B durante a sincronização com o nó A e o log do compartimento no nó B foi corrompido. A causa raiz ainda é um mistério. Mas a análise dos logs pode encontrar algumas entradas duplicadas e abaixo estão as informações do log de erro:
[ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236).
[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position', Error_code: 1236
111014 20:25:48 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.001067', position 183468345.
Como lidamos com a replicação nessa situação? Podemos pular o log bin atual e iniciar a replicação com o próximo log bin disponível e sua posição. É uma boa ideia sincronizar o nó B com o nó A:
CHANGE MASTER TO
MASTER_HOST='XX.XX.XXX.XXX',
MASTER_USER='replicate',
MASTER_PASSWORD='slave',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.001025',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
A principal razão pela qual estou apresentando esse cenário é que não quero restaurar o banco de dados e construí-lo do zero, onde o backup do banco de dados tem cerca de 80 GB no nó B. Como posso reparar a replicação?
Há duas coisas que precisam ser mencionadas aqui:
1) A palavra impossível é uma oferta inoperante.
Client requested master to start replication from impossible position
. Aqui está o que isso significa essencialmente:Acontece que o tamanho do arquivo de um log binário e a posição dos logs binários são a mesma coisa. O escravo deseja ler da posição mysql-bin.001067 183468345. Como a palavra 'impossível' aparece na mensagem, isso indica que o log binário mestre mysql-bin.001067 é menor que 183468345 bytes. Para fazer a replicação funcionar novamente, pule para o próximo log binário:
NewPos depende da versão do MySQL .
2) Você pode simplesmente usar as ferramentas de sincronização de dados da Percona.
Eu uso essas ferramentas há cerca de 2 anos e elas ajudam você a encontrar diferenças nas tabelas entre master e slave, mesmo que a tabela no master seja InnoDB e a mesma tabela no slave seja MyISAM (desde que as tabelas tenham a mesma estrutura de tabela ).
A replicação deve estar ativada durante a execução dessas ferramentas.
BTW Percona tem um novo conjunto de ferramentas chamado Percona Toolkit . Eles se separaram de suas próprias ferramentas MAATKIT para fazer outras melhores. As ferramentas são provavelmente chamadas de pt-table-checksum e pt-table-sync .
Preciso de mais informações (conforme observado em meu comentário à pergunta), mas começarei dando um aviso geral sobre a sincronização dos nós.
Se você tentar sincronizar o Nó B com o Nó A, certifique-se de ter um backup muito recente, caso a sincronização dê errado.