Pergunta

Estou tentando configurar a replicação para um banco de dados MySQL grande (120 GB) e errei.

Desliguei o master, copiei os arquivos de dados e reiniciei o master.Agora configurei o escravo e o iniciei, e percebo que deixei de obter o MASTER_LOG_FILE e MASTER_LOG_POS valores necessários para configurar a replicação.

Ainda tenho uma cópia intacta dos arquivos de dados.Existe alguma maneira de determinar MASTER_LOG_FILE e MASTER_LOG_POS desses arquivos?

Pergunta relacionada:

  • o que acontece se você definir o MASTER_LOG_POS para um ponto anterior no tempo?
  • Estou correto ao assumir que consultas duplicadas serão executadas, possivelmente resultando em dados duplicados?

Editar

Eu estive investigando o mysqlbinlog comando e descobri o que parece ser a informação correta executando:

mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
    mysql-bin.000006 | grep end_log_pos

A saída é mais ou menos assim:

... a whole bunch more lines ...

#150621 20:10:21 server id 1  end_log_pos 720159843     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720161877     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720162762     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164796     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164815     Stop

Acho que deveria usar uma dessas duas últimas posições, mas não tenho certeza de qual.

Foi útil?

Solução

Felizmente, você ainda não iniciou o mysqld no escravo.

Acontece que uma posição do log binário também é o tamanho do log binário no final de cada evento do log binário.No seu caso, você pode usar o último binlog que o escravo vê, que posso assumir que é mysql-bin.000006.Obtenha o tamanho do arquivo e use-o como posição.

Portanto, no Slave você correria

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='repluser',
    MASTER_PASSWORD='replpassword',
    MASTER_LOG_FILE='mysql-bin.00006',
    MASTER_LOG_POS=720164815;
START SLAVE;

e isso deveria bastar !!!

Já discuti a posição do binlog como o tamanho do arquivo antes

Você também perguntou

o que acontece se você definir MASTER_LOG_POS para um momento anterior?

Sim, ele reproduzirá esses eventos do binlog e causará problemas.

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