Déverrouillage d'une table MySQL « bloquée » : dépannage du « délai d'attente de verrouillage dépassé »
Lorsque vous rencontrez le « délai d'attente de verrouillage dépassé ; essayez de redémarrer transaction" lorsque vous travaillez avec une table InnoDB dans MySQL, il est probable qu'une transaction soit restée bloquée. Voici comment réparer la table et résoudre la transaction bloquée :
1. Identifiez la transaction bloquée :
Exécutez la commande suivante dans l'interface de ligne de commande MySQL ou via phpMyAdmin :
SHOW PROCESSLIST;
Cela affichera une liste des threads en cours d'exécution. Recherchez les threads avec un temps d'exécution long ou ceux qui sont dans un état « Veille ». L'ID du fil de discussion correspondant sera affiché dans la colonne "Id".
2. Terminez le fil bloqué :
Une fois le fil bloqué identifié, terminez-le à l'aide de la commande suivante dans l'interface de ligne de commande :
KILL <thread_id>;
Remplacez
3. Redémarrez la transaction (facultatif) :
Si la transaction est toujours active, redémarrez-la pour libérer les verrous qu'elle pourrait détenir. Vous pouvez le faire en exécutant la commande suivante :
START TRANSACTION; COMMIT;
4. Supprimez l'index (le cas échéant) :
Si vous avez déjà essayé de supprimer un index sur la table affectée et que cela a échoué en raison du verrou, essayez de le supprimer à nouveau après avoir terminé le thread bloqué et redémarré la transaction. .
ALTER TABLE <table_name> DROP INDEX <index_name>;
En suivant ces étapes, vous pouvez déverrouiller la table bloquée et résoudre l'erreur « Délai d'attente de verrouillage dépassé ». N'oubliez pas de vérifier régulièrement les threads en cours d'exécution pour identifier et mettre fin à toute transaction potentiellement bloquée afin d'éviter des problèmes similaires à l'avenir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!