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?
[~ # ~] 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.
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
:
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:
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.
RESET MASTER;
Sur le maître, rsync/var/lib/mysql de Master à esclave, démarrez MySQL sur l'esclave, la réplication de configurationVoici mes messages qui peuvent aider avec ces étapes
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.
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