MySQL: "délai d'attente de verrouillage dépassé"

j'essaie de supprimer plusieurs lignes d'une base de données MySQL 5.0.45:

delete from bundle_inclusions;

le client travaille pendant un certain temps et retourne ensuite l'erreur:

Lock wait timeout exceeded; try restarting transaction

il est possible qu'il y ait une transaction non engagée là-bas qui a un verrou sur cette table, mais j'ai besoin de ce processus pour prendre le dessus sur de telles serrures. Comment briser la serrure de MySQL?

12
demandé sur Adrian Dunston 2008-09-15 20:53:54

4 réponses

je suis d'accord avec Erik; TRUNCATE TABLE est le chemin à parcourir. Toutefois, si vous ne pouvez pas l'utiliser pour une raison quelconque (par exemple, si vous n'avez pas vraiment vous voulez supprimer toutes les lignes de la table), vous pouvez essayer l'une des options suivantes:

  • supprimer les lignes dans des lots plus petits (par exemple Supprimer de bundle_inclusions où id entre ? et ?)
  • si C'est une table MyISAM (en fait, cela peut fonctionner avec InnoDB aussi), essayez d'émettre une table LOCK avant la suppression. Cela devrait la garantie d'avoir un accès exclusif.
  • si c'est une table InnoDB, alors après le délai se produit, utilisez montrer L'état INNODB. Cela devrait vous donner un aperçu de pourquoi l'acquisition de verrou a échoué.
  • si vous avez le super Privilège, vous pouvez essayer D'afficher la liste de processus tout pour voir quelles autres connexions(s'il y en a) utilisent la table, et puis utiliser KILL pour se débarrasser de celle (s) avec laquelle (lesquelles) vous êtes en compétition.

je suis sûr qu'il ya beaucoup d'autres possibilités; j'espère que l'une d'entre elles vous aidera.

19
répondu Matt Solnit 2008-09-15 17:08:29

Linux: en configuration mysql (/etc / my.cnf ou /etc/mysql/my.cnf), insérez / modifiez cette ligne

innodb_lock_wait_timeout = 50

augmenter la valeur suffisamment (c'est en secondes), redémarrer la base de données, effectuer des modifications. Puis revenez en arrière et redémarrez à nouveau.

5
répondu Lars Bohl 2012-05-22 14:49:13

Supputing: truncate table bundle_inclusions

3
répondu Erik 2008-09-15 16:58:52

j'ai eu le même problème, un voyou transaction sans fin. J'ai relancé le processus mysqld. Tu n'as pas besoin de tronquer une table. Vous pourriez perdre des données de cette transaction frauduleuse.

3
répondu Eric Cope 2013-03-21 05:03:02