Résoudre les verrous de table MySQL sans redémarrage du serveur
L'erreur « Délai d'attente de verrouillage dépassé ; essayez de redémarrer la transaction » est souvent interprétée à tort comme nécessitant un redémarrage du serveur. Cependant, ce problème de verrouillage peut survenir même sans transactions explicites. Examinons la cause profonde et proposons une solution pour libérer les tables concernées.
L'erreur indique un verrou empêchant une instruction MySQL UPDATE
. Même sans lancer de transaction, MySQL peut conserver des verrous en raison de transactions implicites ou de processus en arrière-plan.
Pour résoudre ce problème, une méthode directe (bien que potentiellement risquée) consiste à déverrouiller la table de force :
<code class="language-sql">mysql -u your_user -p</code>
<code class="language-sql">mysql> show open tables where in_use > 0;</code>
Cela affiche les tables actuellement verrouillées.
<code class="language-sql">mysql> show processlist;</code>
Cela montre les processus actifs. Identifiez le(s) processus verrouillant la(les) table(s) cible(s).
<code class="language-sql">mysql> kill <process_id>;</code>
Remplacez <process_id>
par l'ID du processus de verrouillage.
Cela déverrouille de force les tables, permettant l'instruction UPDATE
. Surtout, cette méthode comporte un risque de corruption des données et ne devrait être qu'une solution temporaire tout en résolvant le problème d'application sous-jacent.
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!