Der Versuch, den SHOW SLAVE STATUS in MySQL zu verstehen


11

Ich habe ein Master-Slave-Replikationssetup und es sieht so aus, als ob es gut läuft. Unten ist ein Ergebnis des SHOW SLAVE STATUSBefehls:

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:

Ich möchte gerne mehr über das verstehen Relay_Log_File, Relay_Log_Posund Relay_Master_Log_File.

Meine Fragen sind:

  • Stimmt es, dass die Relay-Protokolldatei lokal gelesen und gespeichert wird, damit die Replikation ausgeführt werden kann?

  • Was ist mit dem relay_master_log_filedamals ? Wie unterscheidet es sich von der Master_Log_File?

  • Was sind diese beiden Werte, nämlich. , Read_Master_Log_PosUnd Relay_Log_Pos? Warum werden sie angezeigt, obwohl die Replikation abgeschlossen und synchron ist?

  • Stimmt es, dass diese Dateien im Binärformat vorliegen und ich sie daher nicht anzeigen kann?

Antworten:


8

Ich möchte weiter verstehen, ist die Relay_Log_File, Relay_Log_Pos und Relay_Master_Log_File.

Von SHOW SLAVE STATUS\Gerhalten Sie zwei Werte

  • Relay_Log_File : Aktuelles Relay-Protokoll, das während der Replikation neue Einträge akzeptiert
  • Relay_Log_Pos : Aktuelle Position des aktuellen Relaisprotokolls, das während der Replikation neue Einträge akzeptiert
  • Relay_Master_Log_File : Relay-Protokolldatei mit der zuletzt erfolgreich ausgeführten SQL-Anweisung auf dem Master, die auf dem Slave ausgeführt wurde.
  • Master_Log_File: Das Protokoll auf dem Master, das der aktuellen Relaisprotokolldatei und der aktuellen Relaisprotokollposition entspricht

Die Dateien sind binär und können daher nicht richtig angezeigt werden

Ja, Sie können die Relay-Protokolle anzeigen. Da sie dieselbe Struktur wie ein reguläres Binärprotokoll haben, führen Sie einfach das Programm mysqlbinlog aus. Gehen Sie folgendermaßen vor, um die SQL in einem Ihrer Relay-Protokolle anzuzeigen, z. B. im letzten:

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

Ich bin jetzt klarer, wie wäre es mit Exec_Master_Log_Pos (ist dies die ausführende Master-Protokollposition) und till_log_pos, wo ich aufhören soll?
Neuling 14

Kleiner Fehler hier. Relay_Master_Log_Fileist der Name der Master-Binärprotokolldatei , die das letzte vom SQL-Thread ausgeführte Ereignis enthält, nicht die Relay-Protokolldatei .
Crishoj

@ RolandoMySQLDBA ayudame porfavor dba.stackexchange.com/questions/177277/…
Ivan More Flores

8

Relay_Master_Log_Fileist eigentlich der Name des binlog auf dem Master, der die letzte SQL-Anweisung enthält, die erfolgreich auf dem Slave ausgeführt wurde. Es ist nicht der Name eines Relaisprotokolls auf dem Slave. Siehe: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posist die Position in der Datei release_master_log_file, bis zu der der Slave-SQL-Thread ausgeführt wurde. In Ihrem Beispiel hat die Slave-Datenbank alle Anweisungen bis zum binlog mysql-bin.000001pos 10726644 auf der Master-Datenbank ausgeführt .

until_log_poswird wirklich nur verwendet, wenn Sie Ihren Slave mit der Syntax starten START SLAVE UNTIL master_log_pos = $integer. Diese Syntax wird bis zu dieser Position repliziert (es wird die sein exec_master_log_pos) und dann gestoppt. Normalerweise tun Sie dies nur, wenn Sie zu einem bestimmten Punkt replizieren möchten, aber nicht weiter (z. B. wenn die nächste Anweisung ein versehentliches Löschen einer Tabelle oder etwas anderes ist). Der Wert von until_log_posist 0, wenn er nicht angegeben ist. In Ihrem Fall bedeutet dies, dass die Replikation einfach weitergeht.


Danke, ich werde jetzt noch klarer. Gibt es noch etwas zu überwachen?
Neuling 14
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.