Ich versuche zu verstehen, dass der Sklavenstatus in MySQL zu sehen ist
-
22-10-2019 - |
Frage
Ich habe ein Master-Sklaven-Replikations-Setup und es sieht so aus, als würde es gut laufen. Unten ist ein Ergebnis von SHOW SLAVE STATUS
Befehl:
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 würde gerne weiter über die verstehen Relay_Log_File
, Relay_Log_Pos
und Relay_Master_Log_File
.
Meine Fragen sind:
Ist es wahr, dass die Relay -Protokolldatei eine ist, die lokal gelesen und gespeichert wird, damit die Replikation ausgeführt wird?
Was ist mit
relay_master_log_file
dann; Wie unterscheidet es sich von denMaster_Log_File
?Was sind diese beiden Werte, nämlich.,
Read_Master_Log_Pos
undRelay_Log_Pos
? Warum werden sie angezeigt, obwohl die Replikation vollständig und synchron ist?Stimmt es, dass sich diese Dateien im binären Format befinden, und daher kann ich sie nicht anzeigen?
Lösung
Ich möchte weiter verstehen, ist die Relay_log_file, relay_log_pos und relay_master_log_file.
Aus SHOW SLAVE STATUS\G
, Holen Sie sich zwei Werte
Relay_Log_File
: Aktuelles Relaisprotokoll, das neue Einträge während der Replikation akzeptiertRelay_Log_Pos
: Aktuelle Position des aktuellen Relaisprotokolls, das neue Einträge während der Replikation akzeptiertRelay_Master_Log_File
: Relay -Protokolldatei mit der zuletzt erfolgreich ausgeführten SQL -Anweisung auf dem Master, der auf dem Sklaven ausgeführt wurde.- Master_log_file: Das Protokoll auf dem Master, das der aktuellen Relay -Protokolldatei und der aktuellen Relay -Protokollposition entspricht
Die Dateien sind in Binärdateien, sodass sie nicht richtig anzeigen können
Ja, Sie können die Relaisprotokolle anzeigen. Da sie die gleiche Struktur wie ein normales binäres Protokoll haben, laufen Sie einfach die Mysqlbinlog Programm. Zum Beispiel, um die SQL in einem von Ihnen Relaisprotokollen wie das letzte anzuzeigen, tun Sie Folgendes:
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
Andere Tipps
Relay_Master_Log_File
ist tatsächlich der Name des Binlogs auf dem Master, der die letzte SQL -Anweisung enthält, die erfolgreich auf dem Sklaven ausgeführt wurde. Es ist nicht der Name eines Relaisprotokolls auf dem Sklaven. Sehen: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
ist die Position in der Relay_Master_log_file, die der Slave SQL -Thread ausgeführt hat. In Ihrem Beispiel hat die Sklavin DB also alle Aussagen bis zum Binlog ausgeführt mysql-bin.000001
POS 10726644 auf dem Master DB.
until_log_pos
wird wirklich nur verwendet, wenn Sie Ihren Sklaven mit der Syntax starten START SLAVE UNTIL master_log_pos = $integer
. Diese Syntax repliziert sich bis zu dieser Position (es wird die sein exec_master_log_pos
) und dann aufhören. Normalerweise tun Sie dies nur, wenn Sie sich zu einem bestimmten Punkt replizieren möchten, aber nicht weiter (wenn die nächste Aussage ein zufälliger Tischabfall oder so ist). Der Wert von until_log_pos
ist 0, wenn es nicht angegeben ist, so bedeutet in Ihrem Fall, dass die Replikation nur weiter voranschreitet.