MySQL Binary Log Replication: peut-il être configuré pour ignorer les erreurs?
Je suis à court d'un maître-esclave, MySQL log binaire système de réplication (ouf!) que, pour certaines données, n'est pas synchronisé (sens, le maître détient plus de données que l'esclave). Mais l'esclave s'arrête très souvent sur la moindre erreur MySQL, cela peut-il être désactivé? (peut-être un mon.cnf de réglage pour la réplication de l'esclave ignorer-réplication des erreurs ou certains de la sorte 😉 )
C'est ce qui se passe, chaque maintenant et puis, lorsque l'esclave tente de reproduire un élément qui n'existe pas, l'esclave meurt juste quelques. une vérification rapide à SHOW SLAVE STATUS \G; donne
Slave-IO-Running: Yes
Slave-SQL-Running: No
Replicate-Do-DB:
Last-Errno: 1062
Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table ( FIELDS ) VALUES ( VALUES )'
qui j'ai rapidement corrigé (une fois que je me rends compte que l'esclave a été arrêté) en procédant comme suit:
STOP SLAVE;
RESET SLAVE;
START SLAVE;
... dernièrement, ce qui a été se genre de fatigant, et avant de me cracher une sorte de PHP qui le fait pour moi, je me demandais si il y a peu mon.cnf entrée qui ne sera pas tuer l'esclave sur le premier message d'erreur.
Acclamations,
/mp
source d'informationauteur mauriciopastrana
Vous devez vous connecter pour publier un commentaire.
Oui, avec --slave-skip-errors=xxx dans mon.cnf, où xxx est "tous" ou une virgule sep liste des codes d'erreur.
arrêter esclave; set global sql_slave_skip_counter=1; start slave;
Vous pouvez ignorer seule l'erreur et de continuer le processus de réplication.
D'abord, voulez-vous vraiment à ignorer les erreurs? Si vous obtenez une erreur, il est probable que les données ne sont pas synchronisées. Peut-être ce que vous voulez est de supprimer la base de données esclave et de redémarrer le processus de synchronisation lorsque vous obtenez un message d'erreur.
Deuxième, je pense que l'erreur que vous obtenez n'est pas lors de la réplication d'un élément qui n'existe pas (ce serait que veut dire de toute façon?) - on dirait que vous êtes de la réplication d'un élément qui existe déjà dans la base de données esclave.
Je soupçonne que le problème provient principalement de ne pas commencer à nettoyer la copie des données. Il semble que le capitaine a été copié à l'esclave; puis la réplication a été désactivé (ou d'échec); et puis il est reparti à la hausse, mais sans donner à l'esclave la chance de se rattraper avec ce qu'il a raté.
Si jamais vous avez un moment où le maître peut être fermé pour l'accès en écriture assez longtemps pour dupliquer la base de données et l'importer dans l'esclave, ce peut être les problèmes pour s'en aller.
Moderne
mysqldump
commandes ont un couple d'options pour vous aider avec la mise en place cohérente de la réplication. Découvrez--master-data
qui va mettre le log binaire du fichier et la position dans le fichier de vidage et de définir automatiquement lorsqu'il est chargé en esclave. Aussi--single-transaction
va faire le dump à l'intérieur d'une transaction, de sorte qu'aucun verrou d'écriture est nécessaire pour la cohérence de vidage.Si l'esclave n'est pas utilisé pour toutes les écritures autres que la réplication, les auteurs de Haute Performance MySQL vous recommandons d'ajouter
read_only
sur le serveur esclave pour empêcher les utilisateurs d', à tort, de la modification des données sur l'esclave comme c'est aussi de créer de la même erreurs que vous avez vécu.je pense que vous faites de la réplication avec synchronisation de la base de données de la première synchronisation de la base de données et d'essayer de réplication et les serveurs sont génératrices de même et unique id et essayer d'auto incerment décalage