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;

       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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top