Erro de replicação do MySQL: Error_code: 1032

4

Eu configurei a réplica de leitura do MySQL que é somente leitura. Tanto o mestre quanto o escravo estão executando o MySQL 5.6. O escravo nunca é escrito diretamente, mas não consigo mantê-lo sincronizado por mais de uma ou duas horas. Depois de correr um pouco, encontro constantemente esse tipo de erro:

Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log

Eu então tenho que passar pelo processo de recriar o escravo de um dump MySQL, mas não importa o que eu faço, eu recebo esse erro novamente. Alguém tem idéia de por que isso pode estar acontecendo?

    
por user209180 26.03.2014 / 03:19

1 resposta

1

Dependendo de qual (is) mecanismo (s) você está usando, se você está usando vários esquemas e as opções que você está usando com o mysqldump você pode não estar recebendo um dump consistente.

Se você tiver dois esquemas, digamos um desenvolvimento nomeado e outra produção nomeada, o mysqldump bloqueia as tabelas separadamente para cada esquema. Isso significa que, embora você esteja fazendo backup do esquema de desenvolvimento, o esquema de produção ainda pode ser gravado e atualizado.

Agora que você tem seu dump dos dois esquemas e inicia a replicação, os dois esquemas estão, na verdade, em diferentes posições do log binário. Isso significa que quando você obter Error_code 1032 você realmente não tem essa chave.

Se todas das tabelas que você precisa fazer backup forem InnoDB, você deve procurar na opção --single-transaction para o mysqldump. Se você tem uma mistura de InnoDB e MyISAM, então apenas as tabelas InnoDB terão a consistência garantida. As tabelas MyISAM ainda serão escritas para usar esta opção.

Se você tem uma mistura de InnoDB e MyISAM ou é apenas MyISAM puro, a melhor opção (usando mysqldump) é usar --lock-all-tables . Isso faz exatamente o que parece, nada será escrito até que o despejo esteja completo. Isso tem a principal desvantagem de que seu aplicativo ou site que depende do banco de dados também está bloqueado (já que não é possível gravar).

A melhor opção para IMO é mover tudo para o InnoDB, se ainda não estiver, e usar o Percona Xtrabackup . Ainda funcionará bem com tabelas MyISAM, mas através de uma ferramenta diferente das tabelas InnoDB ( cp ou rsync ). Ainda será necessário bloquear as tabelas ao copiar as tabelas MyISAM, mas é melhor minimizar esse tempo. Se você usar o método rsync , a ferramenta copiará primeiro todas as suas tabelas MyISAM, e, em seguida, bloqueará as tabelas, copiando todas as tabelas que foram atualizadas desde a primeira cópia. O bloqueio só precisa ser mantido durante o segundo rsync.

    
por 26.03.2014 / 03:54