Sto cercando di capire SHOW SLAVE STATUS in MySQL


11

Ho una configurazione di replica Master-Slave e sembra che stia funzionando bene. Di seguito è riportato un risultato del 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:

Vorrei approfondire la conoscenza di Relay_Log_File, Relay_Log_Pose Relay_Master_Log_File.

Le mie domande sono:

  • È vero che il file di registro di inoltro è uno che viene letto e archiviato localmente per l'esecuzione della replica?

  • Che dire relay_master_log_fileallora? come è diverso dal Master_Log_File?

  • Quali sono entrambi questi valori, vale a dire. , Read_Master_Log_PosE Relay_Log_Pos? Perché vengono visualizzati anche se la replica è completa e sincronizzata?

  • È vero che questi file sono in formato binario e quindi non riesco a visualizzarli?

Risposte:


8

Voglio capire ulteriormente che è Relay_Log_File, Relay_Log_Pos e Relay_Master_Log_File.

Da SHOW SLAVE STATUS\G, ottieni due valori

  • Relay_Log_File : Registro di inoltro corrente che accetta nuove voci durante la replica
  • Relay_Log_Pos : Posizione corrente del registro di inoltro corrente che accetta nuove voci durante la replica
  • Relay_Master_Log_File : File di registro di inoltro contenente l'ultima istruzione SQL eseguita correttamente sul master eseguita sullo slave.
  • Master_Log_File: il registro sul Master che corrisponde al file di registro di inoltro corrente e alla posizione corrente del registro di inoltro

I file sono in formato binario, quindi non sono in grado di visualizzarli correttamente

Sì, è possibile visualizzare i registri di inoltro. Poiché hanno la stessa struttura di un normale registro binario, basta eseguire il programma mysqlbinlog . Ad esempio, per visualizzare l'SQL all'interno di uno qualsiasi dei tuoi log di inoltro, come l'ultimo, procedere come segue:

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt

Ora sono più chiaro che ne dici di Exec_Master_Log_Pos (è questa la posizione del registro principale in esecuzione) e fino a quando_log_pos dove fermarsi è?
newbie14,

Piccolo errore qui. Relay_Master_Log_Fileè il nome del file di registro binario principale contenente l'evento più recente eseguito dal thread SQL, non il file di registro di inoltro .
crishoj,


8

Relay_Master_Log_Fileè in realtà il nome del binlog sul master contenente l'ultima istruzione SQL eseguita correttamente sullo slave. Non è il nome di un registro di inoltro sullo slave. Vedi: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posè la posizione nel file relay_master_log_ che il thread SQL slave ha eseguito fino a. Quindi nel tuo esempio, lo slave db ha eseguito tutte le istruzioni fino a quando binlog mysql-bin.000001pos 10726644 sul master db.

until_log_posviene utilizzato solo se si avvia lo slave con la sintassi START SLAVE UNTIL master_log_pos = $integer. La sintassi si replicherà fino a quella posizione (sarà la exec_master_log_pos) e poi si fermerà. Normalmente lo faresti solo se volessi replicare in un punto specifico, ma non oltre (come se l'istruzione successiva fosse un drop accidentale della tabella o qualcosa del genere). Il valore di until_log_posè 0 quando non è specificato, quindi nel tuo caso significa che la replica continuerà semplicemente ad andare avanti.


grazie sto diventando ancora più chiaro ora. C'è qualcos'altro da monitorare ora?
newbie14
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.