Tentando entender o SHOW SLAVE STATUS no MySQL

11

Eu tenho uma configuração de replicação Master-Slave e parece que está funcionando bem. Abaixo está um resultado do SHOW SLAVE STATUScomando:

show slave STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: *.*.*.*
                  Master_User: repliV1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 10726644
               Relay_Log_File: mysqld-relay-bin.000056
                Relay_Log_Pos: 231871
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data1
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 10726644
              Relay_Log_Space: 232172
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:

Eu gostaria de entender melhor sobre o Relay_Log_File, Relay_Log_Pose Relay_Master_Log_File.

Minhas perguntas são:

  • É verdade que o arquivo de log de retransmissão está sendo lido e armazenado localmente para que a replicação seja executada?

  • E quanto ao relay_master_log_fileentão; como é diferente do Master_Log_File?

  • Quais são esses dois valores, viz. , Read_Master_Log_PosE Relay_Log_Pos? Por que eles estão aparecendo, mesmo que a replicação esteja completa e sincronizada?

  • É verdade que esses arquivos estão no formato binário e, portanto, não consigo visualizá-los?

newbie14
fonte

Respostas:

8

Quero entender melhor o Relay_Log_File, Relay_Log_Pos e Relay_Master_Log_File.

De SHOW SLAVE STATUS\G, obtenha dois valores

  • Relay_Log_File : Log de retransmissão atual que aceita novas entradas durante a replicação
  • Relay_Log_Pos : Posição atual do log de retransmissão atual que aceita novas entradas durante a replicação
  • Relay_Master_Log_File : Arquivo de log de retransmissão que contém a última instrução SQL executada com êxito no mestre executada no escravo.
  • Master_Log_File: o log no Master que corresponde ao arquivo de log de retransmissão atual e à posição atual do log de retransmissão

Os arquivos estão em binário, portanto, não é possível visualizá-los corretamente

Sim, você pode visualizar os logs de retransmissão. Como eles têm a mesma estrutura que um log binário comum, basta executar o programa mysqlbinlog . Por exemplo, para visualizar o SQL em qualquer um dos logs de retransmissão, como o último, faça o seguinte:

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
RolandoMySQLDBA
fonte
Agora estou mais claro e quanto ao Exec_Master_Log_Pos (essa é a posição do log mestre em execução) e até o _log_pos onde parar é?
newbie14
Pequeno erro aqui. Relay_Master_Log_Fileé o nome do arquivo de log binário principal que contém o evento mais recente executado pelo encadeamento SQL, não o arquivo de log de retransmissão .
crishoj 18/09/16
@RolandoMySQLDBA ayudame porfavor dba.stackexchange.com/questions/177277/…
Ivan More Flores
8

Relay_Master_Log_Fileé realmente o nome do binlog no mestre que contém a última instrução SQL executada com sucesso no escravo. Não é o nome de um log de retransmissão no escravo. Consulte: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posé a posição no relay_master_log_file que o encadeamento SQL escravo executou até. Portanto, no seu exemplo, o db escravo executou todas as instruções até o mysql-bin.000001binlog pos 10726644 no db mestre.

until_log_posé realmente usado apenas se você iniciar seu escravo com a sintaxe START SLAVE UNTIL master_log_pos = $integer. Essa sintaxe será replicada até essa posição (será a exec_master_log_pos) e depois parará. Normalmente, você faria isso apenas se quisesse replicar para um ponto específico, mas não mais (como se a próxima instrução fosse uma queda acidental da tabela ou algo assim). O valor de until_log_posé 0 quando não for especificado, portanto, no seu caso, significa que a replicação continuará avançando.

drogart
fonte
obrigado Estou ficando ainda mais claro agora. Mais alguma coisa para monitorar agora?
newbie14