Pergunta

Eu configurei a replicação para o servidor MySQL. I pode se conectar a partir da máquina escravo ao servidor mestre usando o usuário de replicação / senha. Eu tenho o escravo SQL segmento em execução, mas o escravo I / O segmento não é execução e o status de e / S escrava vem como vazio quando verificada usando 'show condição de escravo'. O que poderia ser o problema?

Como posso resolver isso? Reiniciando o escravo não ajuda.

Esta foi a minha má:. Em vez de dar um privilégio 'de replicação slave' para *.*, eu só estava dando para my_db.*

Foi útil?

Solução

Em vez de dar uma 'replicação privilégio escravo' para., eu tinha apenas dando-lhe para my_db. *.

Replication escravo só é um privilégio global (ou seja, por usuário apenas), isto significa que um comando como

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

não tem efeito como você não pode concedê-lo por banco de dados / coluna / table.

O comando que você precisa executar é:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

Em seguida, faça uma START SLAVE. Você também pode achar que é útil olhar no log de erro mysql.

Eu sugiro uma boa leitura do href="http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html" rel="nofollow noreferrer"> configuração de replicação , como explica tudo isso em detalhes.

Outras dicas

Eu enfrentei mesmo problema e fixo através seguintes passos. ligação completa linha é http://www.percona.com/forums/questions-discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no

As etapas são mesmo como mencionado por @ Luxknight007 exceto seu passo 2. No entanto esta discussão contém mais detalhes, que é muito útil. A seguir é a solução que eu usei e funcionou.

"A primeira questão é que você mudou a posição de replicação em vez de corrigir o erro, e usado um formato de nome de arquivo de log binário incorreta (você provavelmente usado apenas o de que o pós-lo ligado eu acho). Para voltar ao onde você começou, você precisa encontrar o arquivo de log binário ea posição que o SQL_THREAD escravo parou. com base na sua saída condição de escravo, parece que o escravo está lendo de um novo arquivo de log binário (você pode ver que o valor Read_Master_Log_Pos é menor do que o valor Exec_Master_Log_Pos, o que significa que tem que ser a leitura de um arquivo de log binário mais recente do que onde o SQL_THREAD escravo parou em), então você precisa encontrar o arquivo de log binário que o escravo SQL_THREAD realmente falhou em. Portanto, procure no log de erro para algo como o abaixo:

Código:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

Este é um exemplo que eu recriado, então o seu vai ser um pouco diferente. Observação O erro é semelhante ao que você vê na sua condição de escravo. Então, encontrar a sua mensagem de erro específica no arquivo de log de erro, e em seguida, localize a parte final, onde é dá-lhe o nome do arquivo e posição ( "Paramos em log posição 3427 'mysql-bin.000001'" no meu exemplo). A posição deve ser 315098143 baseado em sua condição de escravo show, como é que quando ele o SQL_THREAD escravo parou de executar eventos (Exec_Master_Log_Pos), mas o IO_THREAD continuei lendo em novas (Read_Master_Log_Pos).

Depois de encontrar o nome do arquivo de log binário correto e posição, re-executar a sua declaração de mestre de modificações em seu escravo usando as informações que você localizado no log de erro. Note que o nome do arquivo deve ser algo como "newcrmdb1-bin.XXXXXX", não mysql-bin.XXXXXX (você pode ver essa convenção de nomenclatura a sua condição de escravo mostram acima).

Código:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

Uma vez que você voltar apontado para o local replicação original onde o SQL_THREAD escravo falhou, você precisa, em seguida, corrigir o erro que ele estava reclamando para começar.

Aparece o erro de replicação inicial para lhe dizer que o asteriskcdr.bpleadcf tabela não existe no slave, assim que a instrução de inserção está a falhar quando ele tenta selecionar os dados dessa tabela. Portanto, o problema não é que seu escravo parece ser já fora de sincronia com o seu mestre. Se a tabela em questão no mestre é estático ou quase estático, você poderia provavelmente resolver este exportando os dados de apenas uma tabela no master usando mysqldump e carregá-lo para o escravo. Se isso não for possível, ou você não se preocupam com esses dados, você sempre pode simplesmente ignorar a declaração de replicação com SQL_SLAVE_SKIP_COUNTER, mas, em seguida, o escravo seria ainda mais fora de sincronia com o mestre.

E se tudo mais falhar, você sempre pode reconstruir o escravo do mestre como um último recurso também. =) "

Eu encontrei o mesmo problema e eu tento isso etapas

Primeiro adicione isso em algum lugar código abaixo [mysqld] no my.cnf ou my.ini slave-skip-errors=1046 este irá ignorar todos os entrada duplicada, uma vez que irá executar todo o arquivo de log binário, onde a paragem de replicação, você pode comentar este código após a replicação bem sucedido.

1.Pare ESCRAVO;

2.RESET ESCRAVO;

3.CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000049';

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4.Change MASTER TO MASTER_LOG_POS = 98;

5.Start ESCRAVO;

seleção se você for bem sucedido

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