Problèmes de réplication sur MySQL

Classé dans : Bases de données | 2 commentaires

jeudi 03 juin 2010

Si vos serveurs esclaves MySQL affichent un status Seconds_Behind_Master à Null, il est fort probable qu'une requête soit mal passée.


Ceci peut être corrigé très simplement, en fonction du type de l'erreur.

Commençons par déterminer d'où vient l'erreur :

Lancez la commande suivante sur l'esclave MySQL qui pose problème :

SHOW SLAVE STATUS

et analysez le champ Ladt_SQL_Error.

2 cas de figures se présentent :

  • Soit la requête est une requête critique qui pourrait désynchroniser la réplication (un INSERT, DELETE, ALTER,...) ou une requete UPDATE qui fait que les données ne seront plus en phase entre le maître et l'esclave et dans ce cas, il est préférable de resynchroniser complètement les 2 serveurs.
  • Soit la requète n'est pas critique (c'est le cas chez nous la plupart du temps), par exemple un UPDATE sans trop de conséquence.

Dans ce deuxième cas, voila la marche à suivre :

Lancez les commandes suivantes dans le client MySQL:

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n; (où n est le nombre de requetes à sauter (1 en général))
START SLAVE;

Vérifiez avec SHOW SLAVE STATUS;

 Il faut parfois lancer plusieurs fois la commandeSET GLOBAL SQL_SLAVE_SKIP_COUNTER = n; pour que ça marche (en mettant 2 si 1 ne fonctionne pas).

 

Votre esclave devrait avoir retrouvé un statut de réplication correct.



Commentaires

Le 17 septembre 2010 Boby a dit :

Bonjour,
Je ne comprends pas vraiment votre cas n°2. Comment un UPDATE peut ne pas être critique??
Si un UPDATE est passé sur la base principale et que vous ne l'appliquez pas sur la base répliquée, alors l'intégrité des données de votre 2eme base est remise en cause?

En ce moment j'essaye justement de trouver de la documentation pour savoir si la base répliquée est dans le même état que la base principale.

Merci pour vos explications

Le 28 septembre 2010 fred a dit :

@Boby :
Un update est aussi important d'un point de vue de l'intégrité des données.

Mais un update peut généralement être rejoué sans difficulté (bien sûr, cela dépend de la base), alors que si un insert saute, c'est tout le système des clés primaires qui risque de se trouver en décalage, et dans ce cas, le rattrapage est quasiment impossible.

Lorsqu'un update psoe problème et bloque la réplication, on le retrouve dans le champ last_sql_error sur une commande SHOW SLAVE STATUS.

Fil RSS des commentaires de cet article