Essayer de comprendre SHOW SLAVE STATUS dans MySQL
-
22-10-2019 - |
Question
J'ai une configuration de réplication maître-esclave et il ressemble à ce qu'il fonctionne bien. Ci-dessous est le résultat de la commande SHOW SLAVE STATUS
:
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:
Je voudrais comprendre plus sur l'Relay_Log_File
, Relay_Log_Pos
et Relay_Master_Log_File
.
Mes questions sont les suivantes:
-
Est-il vrai que le fichier journal de relais est celui qui est en cours de lecture et stockée localement pour la réplication à exécuter?
-
Qu'en est-il alors
relay_master_log_file
; comment est-il différent duMaster_Log_File
? -
Quels sont ces deux valeurs, à savoir. ,
Read_Master_Log_Pos
etRelay_Log_Pos
? Pourquoi sont-ils leur apparition, même si la réplication est terminée et la synchronisation? -
Est-il vrai que ces fichiers sont en format binaire, et donc je ne peux pas les voir?
La solution
Je veux comprendre plus est le Relay_Log_File, Relay_Log_Pos et Relay_Master_Log_File.
De SHOW SLAVE STATUS\G
, obtenir deux valeurs
-
Relay_Log_File
: journal de relais de courant accepter de nouvelles entrées lors de la réplication -
Relay_Log_Pos
: Position actuelle du journal de relais en cours d'accepter de nouvelles entrées lors de la réplication -
Relay_Master_Log_File
:. Fichier journal de relais contenant la dernière instruction SQL exécutée avec succès sur le maître qui a été exécuté sur l'esclave - MASTER_LOG_FILE: Le journal du maître qui correspond au fichier journal de relais en cours et la position du journal de relais de courant
Les fichiers sont en binaire afin de ne pas pouvoir les voir à droite
Oui, vous pouvez afficher les journaux de relais. Comme ils ont la même structure que log binaire régulière, il suffit d'exécuter mysqlbinlog programme . Par exemple, pour visualiser le SQL au sein de l'un de vous, des logs de relais tels que le dernier, procédez comme suit:
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
Autres conseils
Relay_Master_Log_File
est en fait le nom de la binlog sur le maître contenant la dernière instruction SQL exécutée avec succès sur l'esclave. Il est pas le nom d'un journal de relais sur l'esclave. Voir: http://dev.mysql.com/doc /refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
est la position dans le Relay_Master_Log_File que le fil de SQL esclave est exécuté jusqu'à. Donc, dans votre exemple, le db esclave a exécuté toutes les instructions jusqu'à ce que binlog mysql-bin.000001
pos 10726644 sur le maître db.
until_log_pos
est vraiment utilisé que si vous démarrez votre esclave avec la syntaxe START SLAVE UNTIL master_log_pos = $integer
. Cette syntaxe va répliquer à cette position (ce sera le exec_master_log_pos
) puis arrêt. Normalement, vous ne le faire que si vous vouliez répliquer à un point spécifique, mais pas plus loin (comme si l'instruction suivante est une baisse de table accidentelle ou quelque chose). La valeur de until_log_pos
est 0 quand il est pas spécifié, donc dans vos moyens de cas que la réplication va simplement continuer à avancer.