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.