Essayer de comprendre SHOW SLAVE STATUS dans MySQL


11

J'ai une configuration de réplication maître-esclave et il semble que cela fonctionne bien. Ci-dessous est le résultat de la SHOW SLAVE STATUScommande:

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 en savoir plus sur les Relay_Log_File, Relay_Log_Poset Relay_Master_Log_File.

Mes questions sont:

  • Est-il vrai que le fichier journal de relais est celui qui est lu et stocké localement pour que la réplication s'exécute?

  • Qu'en est-il relay_master_log_filealors? en quoi est-il différent du Master_Log_File?

  • Quelles sont ces deux valeurs, à savoir. , Read_Master_Log_Poset Relay_Log_Pos? Pourquoi apparaissent-ils alors que la réplication est terminée et synchronisée?

  • Est-il vrai que ces fichiers sont au format binaire et que je ne peux donc pas les visualiser?

Réponses:


8

Je veux comprendre plus en détail est le Relay_Log_File, Relay_Log_Pos et Relay_Master_Log_File.

De SHOW SLAVE STATUS\G, obtenez deux valeurs

  • Relay_Log_File : Journal relais actuel acceptant de nouvelles entrées pendant la réplication
  • Relay_Log_Pos : Position actuelle du journal de relais actuel acceptant de nouvelles entrées pendant 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ée sur l'esclave.
  • Master_Log_File: journal sur le maître qui correspond au fichier journal de relais actuel et à la position du journal de relais actuel

Les fichiers sont en binaire donc pas en mesure de les visualiser correctement

Oui, vous pouvez afficher les journaux de relais. Puisqu'ils ont la même structure qu'un journal binaire normal, il suffit d'exécuter le programme mysqlbinlog . Par exemple, pour afficher le SQL dans l'un de vos journaux de relais, comme le dernier, procédez comme suit:

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

Je suis maintenant plus clair que diriez-vous d'Exec_Master_Log_Pos (est-ce la position du journal maître en cours d'exécution) et jusqu'à_log_pos où arrêter est-ce?
newbie14

Petite erreur ici. Relay_Master_Log_Fileest le nom du fichier journal binaire maître contenant l'événement le plus récent exécuté par le thread SQL, pas le fichier journal de relais .
crishoj


8

Relay_Master_Log_Fileest en fait le nom du binlog sur le maître contenant la dernière instruction SQL exécutée avec succès sur l'esclave. Ce n'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_Posest la position dans le fichier relay_master_log_file que le thread SQL esclave a exécuté jusqu'à. Donc, dans votre exemple, la base de données esclave a exécuté toutes les instructions jusqu'à binlog mysql-bin.000001pos 10726644 sur la base de données maître.

until_log_posn'est vraiment utilisé que si vous démarrez votre esclave avec la syntaxe START SLAVE UNTIL master_log_pos = $integer. Cette syntaxe se répliquera jusqu'à cette position (ce sera le exec_master_log_pos) puis s'arrêtera. Vous ne feriez normalement cela que si vous vouliez répliquer vers un point spécifique, mais pas plus loin (comme si la prochaine instruction est une chute de table accidentelle ou quelque chose). La valeur de until_log_posest 0 lorsqu'elle n'est pas spécifiée, ce qui signifie que dans votre cas, la réplication continuera à avancer.


merci, je deviens encore plus clair maintenant. Autre chose à surveiller maintenant?
newbie14
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.