web-dev-qa-db-fra.com

Quand est-il des secondes_behind_master trop grand?

Mon mysql_slave a été bloqué sur une erreur et construit jusqu'à 200 000 secondes_BeHind_Master. Devrais-je le reconstruire et commencer à partir de zéro ou laissez-le vous rattraper en soi?

3
vinhboy

[~ # ~] IMHO [~ # ~]

Laissez-le rattraper.

Le secondes_behind_master La lecture n'est pas ce que je compte pour voir si le rattrapage est possible ou valant la peine. N'ayez pas peur du nombre signalé.

Vous devez regarder le paramètre Server pour expire_logs_days . Si votre esclave est si loin derrière ce que le fichier journal binaire a été supprimé, vous devez re-image.

6
randomx

Secondes_behind_master est vraiment une épée à double tranchant

Lorsque Seconds_Behind_Master Augmente de manière significative, il existe deux scénarios à examiner avec la sortie de SHOW SLAVE STATUS\G:

SCÉNARIO 1

Si le Relay_Log_Space Est inférieur à 1 g, il s'agit d'un signe révélateur que l'esclave a des problèmes de lecture de ses entrées de binlog de maître via le fil IO. Les horodatages enregistrés sont les journaux de relais sembleraient être asymétriques car le maître a peut-être enregistré son binlog rapidement, mais l'écart entre l'heure actuelle de l'esclave et l'horodatage dans les journaux de relais augmentent. Recherchez des choses comme celles-ci:

  • Charge de serveur sur le maître
  • Demandes de course longue du maître
  • Une série d'instructions de DML qui fonctionnaient bien en parallèle sur le maître, puis serialize sur esclave
  • Latence de réseau sur le fil de l'esclave IO

Scénario # 2

Si le Relay_Log_Space Commence à dépasser 2G, regardez immédiatement Slave_IO_Running Et Slave_SQL_Running. Les chances sont, la réplication est simplement cassée. Dans la plupart des cas, si la réplication se casse, le thread SQL est mort et la maintien du thread IO en marche (Slave_IO_Running Est oui, Slave_SQL_Running Est non), car le IO Le fil est toujours en hausse, il peut attraper de nouvelles commandes SQL que le maître a été expédié aux journaux de relais de l'esclave. Cela peut grandir. Si laissé non vérifié, il pourrait atteindre le point de remplir un disque. Si votre schéma d'alerte vérifie simplement Seconds_Behind_Master Étant NULL, cela devrait vous inviter à adresser rapidement à l'erreur SQL. Si Seconds_Behind_Master Il s'agit simplement d'une augmentation numériquement, cela se produira en raison d'une série d'énoncés DML qui ont fonctionné bien en parallèle sur le maître, puis serialize sur esclave (comme dans le scénario n ° 1). En substance, les instructions SQL du fil IO sont collectées plus rapidement que le thread SQL peut les traiter.

ÉPILOGUE

  • Le scénario n ° 1 nécessite plus d'analyse de dépannage et de cause à la cause.
  • Scénario n ° 2 n'est qu'une indication d'un maître d'écriture lourd qui envoie ses transactions à un esclave pour traiter SQL un à l'heure. Dans ce cas, vous avez l'un des trois (3) choix [.____]
    • Laissez le gatch de réplication
    • Arrêt MySQL sur l'esclave, zap Toutes les données (sauf le dossier MySQL) et faire une nouvelle recharge de MySQL
    • Shutdown mysql sur l'esclave, RESET MASTER; Sur le maître, rsync/var/lib/mysql de Master à esclave, démarrez MySQL sur l'esclave, la réplication de configuration
    • Utilisez Xtrabackup pour effectuer une copie en direct du maître et restaure à l'esclave

Voici mes messages qui peuvent aider avec ces étapes

5
RolandoMySQLDBA

Tu devrais regarder seconds behind master périodiquement, il devrait diminuer sa valeur.

Assurez-vous également que Slave I/O state devrait être Waiting for Master to send event et Slave I/O running et Slave SQL running montre le statut comme oui.

1
Mahesh Patil

Secondes_behind_master (SBM) représentera la différence entre l'horodatage de la dernière transaction traitée par le thread SQL et l'horodatage de la même transaction lorsqu'il a été traité sur le maître. Si vous voyez un SBM de 200 000+ sur l'esclave - cela signifie que la transaction que l'esclave a été exécutée maintenant, a été exécuté 200 000 secondes sur le maître. Cependant, cela ne signifie pas que l'esclave aura besoin du même temps pour rattraper. Cela pourrait être plus ou moins en fonction de la vitesse d'exécution de l'esclave et du nombre réel de transactions que le maître est en avance sur. Découvrez ce message: https://scalegrid.io/blog/mysql-tutorial-understanding-the-seconds-behind-master-value/ qui explique comment comprendre diverses valeurs de secondes_behind_master

0
Prasad Nagaraj