Log Binário Do MySQL Replicação:Ele pode ser configurado para ignorar erros?
-
09-06-2019 - |
Pergunta
Eu estou correndo de um mestre-escravo log binário do MySQL sistema de replicação (ufa!) que, para alguns dados, não está em sincronia (o que significa, o mestre contém mais dados do que o escravo).Mas o escravo deixa muito frequentemente no menor MySQL erro, isso pode ser desativado?(talvez a minha.cnf configuração para replicação de escravos ignorar-replicar, erros ou algum do tipo ;) )
Isso é o que acontece, a cada agora e então, quando o escravo tenta replicar um item que não existe, o escravo apenas morre.uma verificação rápida na SHOW SLAVE STATUS \G; dá
Slave-IO-Running: Yes
Slave-SQL-Running: No
Replicate-Do-DB:
Last-Errno: 1062
Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table ( FIELDS ) VALUES ( VALUES )'
o que eu prontamente correção (uma vez que eu perceber que o escravo tem sido parado) fazendo o seguinte:
STOP SLAVE;
RESET SLAVE;
START SLAVE;
...ultimamente esta tem sido a obtenção tipo de cansativo, e antes que eu cuspir algum tipo de PHP que faz isso para mim, eu estava querendo saber se há alguma minha.cnf entrada que não vai matar o escravo na primeira erro.
Felicidades,
/mp
Solução
Sim, com a opção --slave-skip-errors=xxx no meu.cnf, onde xxx é 'todos' ou uma vírgula sep lista de códigos de erro.
Outras dicas
stop slave;conjunto global sql_slave_skip_counter=1;start slave;
Você pode ignorar o erro e continuar o processo de replicação.
Primeiro, você realmente deseja ignorar erros?Se você receber um erro, é provável que os dados não está em sincronia mais.Talvez o que você deseja é para soltar os escravos do banco de dados e reinicie o processo de sincronização quando você receber um erro.
Segundo, eu acho que o erro que você está recebendo não é quando você replica um item que não existe (o que isso significa afinal?) - parece que você está replicando um item que já existe no escravo de banco de dados.
Eu suspeito que o problema resulta principalmente de não iniciar em um limpo cópia de dados.Parece que o mestre tenha sido copiado para o escravo;em seguida, a replicação foi desativado (ou falha);e então ele começou novamente, mas sem dar o escravo a chance de pegar-se com o que ele perdeu.
Se você já tem um tempo, quando o mestre pode ser fechado para acesso de gravação o tempo suficiente para clonar o banco de dados e importe-o para o escravo, este pode obter os problemas para ir embora.
Moderno mysqldump
comandos tem um par de opções para obter ajuda com a configuração de replicação consistente.Confira --master-data
que irá colocar o arquivo de log binário e a posição em que o despejo e definir automaticamente quando carregado no escravo.Também --single-transaction
vai fazer o despejo dentro de uma transação, de modo que não há bloqueio de gravação é necessário para fazer um consistente de despejo.
Se o escravo não é usada para qualquer escreve diferente da replicação, os autores de Alto Desempenho MySQL recomendam a adição de read_only
no servidor slave para impedir que os usuários, por engano, a alteração de dados no slave como este é também criar os mesmos erros que você experimentou.
eu acho que você está fazendo de replicação com sincronizar o banco de dados de sincronização do banco de dados e tente para a replicação e servidores estão gerando, com o mesmo id e tentar definir auto incerment deslocamento