web-dev-qa-db-fra.com

Erreur de réplication MySQL

Je reçois une erreur sur esclave comme suit:

impossible d'exécuter l'événement Write_Rows sur la table mydatabasename.Able; Entrée en double '174465' pour clé 'primaire', erreur_code: 1062; erreur de gestionnaire ha_err_found_dupp_key; Le journal principal de l'événement mysql-bin.000004, find_log_pos 60121977

Comme je reçois directement des mises à jour de Maître alors pourquoi cela se produit.

Comment pouvons-nous gérer cela de manière efficace de sorte qu'il n'y ait pas de perte de données sur l'esclave.Je ne veut pas configurer la réplication entière à nouveau pour maintenir l'intégrité des données.

Merci..!

7
Abdul Manaf

J'ai fait un script comme ci-dessous pour résoudre ce problème:

Créez un script SQL qui arrêtera l'esclave et la définition SQL_SLAVE_SKIP_COUNTER Pour commencer l'esclave.

>>cat mysql_skip.sql
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;
SELECT SLEEP(1);

ensuite :

>>cat mysql_skip.sh

dup_status=`mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY|wc -l`
while [ $dup_status -ne 0 ]
do
        mysql -uroot -p************** < mysql_skip.sql
        dup_status=`mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY|wc -l`
        mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY
        echo $dup_status
done

De cette façon, j'ai abordé l'affrontement de la réplication des esclaves. Cela peut aider tous.

1
ragesh K

Le script suivant continuera à sauter que l'erreur de réplication du comptoir mondial soit corrigée. Une erreur de réplication se produit généralement lorsque l'heure de la décharge de Master diffère de la position de maître pris diffère.

Essayez ce script:

#!/bin/bash
logfile=~/slave-watcher.log
while true; do
    status=$(mysql --execute="show slave status\G"|grep "Seconds_Behind_Master:"|awk '{print $2}')
    if [ $status == "NULL" ]; then
        mysql --execute="show slave status\G" | grep "Last_SQL_Error:" | tee -a $logfile
        mysql --execute="set global sql_slave_skip_counter=1; start slave;"
    fi
    sleep 1
done

Remarque: pour ajouter un mot de passe, modifiez le script comme celui-ci:

mysql -p votre_password --execute

0
dragosrsupercool