Tratando de entender mostrar el estado de esclavos en mysql
-
22-10-2019 - |
Pregunta
Tengo una configuración de replicación de esclavo maestro y parece que se está ejecutando bien. A continuación se muestra el resultado de SHOW SLAVE STATUS
dominio:
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:
Me gustaría entender más sobre el Relay_Log_File
, Relay_Log_Pos
y Relay_Master_Log_File
.
Mis preguntas son:
¿Es cierto que el archivo de registro de retransmisión es uno que se lee y almacena localmente para que la replicación se ejecute?
Qué pasa con la
relay_master_log_file
después; ¿Cómo es diferente de laMaster_Log_File
?¿Cuáles son los dos valores? verbigracia.,
Read_Master_Log_Pos
yRelay_Log_Pos
? ¿Por qué están apareciendo a pesar de que la replicación está completa y sincronizada?¿Es cierto que estos archivos están en formato binario y, por lo tanto, no puedo verlos?
Solución
Quiero entender más a fondo el relay_log_file, relay_log_pos y relay_master_log_file.
De SHOW SLAVE STATUS\G
, obtenga dos valores
Relay_Log_File
: Registro de relé actual que acepta nuevas entradas durante la replicaciónRelay_Log_Pos
: Posición actual del registro de relé actual que acepta nuevas entradas durante la replicaciónRelay_Master_Log_File
: Archivo de registro de retransmisión que contiene la última declaración SQL ejecutada con éxito en el maestro que se ejecutó en el esclavo.- Maestro_log_file: el registro en el maestro que corresponde al archivo de registro de relé actual y la posición de registro de relé actual
Los archivos están en binario, por lo que no pueden verlos bien
Sí, puede ver los registros de retransmisión. Dado que tienen la misma estructura que un registro binario normal, simplemente ejecute el mysqlbinlog programa. Por ejemplo, para ver el SQL dentro de cualquiera de ustedes registros de retransmisión, como el último, haga esto:
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
Otros consejos
Relay_Master_Log_File
es en realidad el nombre del binlog en el maestro que contiene la última declaración SQL ejecutada con éxito en el esclavo. No es el nombre de un registro de relé en el esclavo. Ver: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
es la posición en el relay_master_log_file que el hilo SQL se ha ejecutado. Entonces, en su ejemplo, el esclavo DB ha ejecutado todas las declaraciones hasta Binlog mysql-bin.000001
POS 10726644 en el maestro DB.
until_log_pos
Realmente solo se usa si comienzas tu esclavo con la sintaxis START SLAVE UNTIL master_log_pos = $integer
. Esa sintaxis se replicará hasta esa posición (será la exec_master_log_pos
) y luego pare. Normalmente solo haría esto si desea replicar en un punto específico, pero no más (como si la siguiente declaración sea una caída de tabla accidental o algo así). El valor de until_log_pos
es 0 cuando no se especifica, por lo que en su caso significa que la replicación seguirá avanzando.