Question

Seconds_Behind_Master ne montre toujours le nombre exact de secondes, l'esclave est derrière le maître?

J'ai également mis en œuvre le contrôle de la réplication mk-battement de coeur.

Il montrait l'autre résultat par rapport à Seconds_Behind_Master.

Lequel est plus précis?

Était-ce utile?

La solution

Seconds_Behind_Master est basé sur la différence entre UNIX_TIMESTAMP () et l'estampille temporelle enregistrée pour la demande de recherche au sein du log binaire du maître, ou le log de relais sur l'esclave. Seconds_Behind_Master réellement vous est perdu dans le contexte de la réplication en temps réel si une série traite de requêtes longue en cours d'exécution. Le retard pourrait croître jusqu'à ce que astronomiquement toutes les entrées du journal de relais sont traitées puis Seconds_Behind_Master baissera soudainement à zéro. En termes de temps réel, vous avez aucun moyen de savoir ou d'anticiper quand le décalage sera eventaully se dissipent jusqu'à ce qu'elle touche zéro.

Strictement en utilisant MySQL, vous pouvez surveiller le décalage de réplication en termes de temps réel de la manière suivante:

  • De SHOW SLAVE STATUS\G, obtenir deux valeurs
    • Relay_Master_Log_File représente fichier journal contenant la dernière exécution avec succès instruction SQL sur le maître qui a été exécuté sur l'esclave.
    • Exec_Master_Log_Pos représente la position dans Relay_Master_Log_File de la dernière exécution avec succès instruction SQL sur le maître qui a été exécuté sur l'esclave.

Vous pourriez effectuer cette contre ce journal binaire:

TMSTMP=`mysqlbinlog ---start-position=EMLP RMFL | head -50 | grep "^SET TIMESTAMP=" | head -1 | sed 's/=/ /g' | sed 's/\// /g' | awk '{print $3}'`
RIGHTNOW=`date +%s`
(( REPLAG = RIGHTNOW - TMSTMP ))

où EMLP est Exec_Master_Log_Pos RMFL et est le Relay_Master_Log_File

Bien que ce soit de manière réaliste la façon correcte pour obtenir le décalage de réplication en utilisant uniquement le fichier journal et postition, vous devez

  • communiquer avec l'esclave pour obtenir le fichier journal nécessaire et la position
  • communiquer avec le maître pour récupérer la décharge du binlog
  • vider le binlog chaque fois que vous vérifiez (mysqlbinlog fonctionne en toute sécurité quand il-il pas le journal actuellement ouvert, cela peut nécessiter d'effectuer JOURNAUX FLUSH sur le maître avant de vider le fichier journal maître)

Obtenir le décalage de réplication à partir des journaux binaires vous prend beaucoup plus de travail jambe.

mk-heartbeat vérifie une table de rythme cardiaque et enregistrer seulement. L'utilisation d'une table en direct sur un maître et en comparant la copie de l'esclave de la table de rythme cardiaque à UNIX_TIMESTAMP () sur l'esclave est une mesure de décalage en temps réel beaucoup plus concis.

Vous devriez aller avec mk-battement de coeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top