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..!
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.
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