Si une table InnoDB est accessible du tout via SELECT ou DML (INSERT, UPDATE, DELETE), vous devez vous attendre à juste titre à un verrou de métadonnées.
Selon la documentation MySQL sur le verrouillage MetaData :
Pour garantir la sérialisation des transactions, le serveur ne doit pas autoriser une session à exécuter une instruction DDL (Data Definition Language) sur une table utilisée dans une transaction non terminée dans une autre session. Le serveur y parvient en acquérant des verrous de métadonnées sur les tables utilisées dans une transaction et en différant la libération de ces verrous jusqu'à la fin de la transaction. Un verrou de métadonnées sur une table empêche les modifications de la structure de la table. Cette approche de verrouillage implique qu'une table qui est utilisée par une transaction dans une session ne peut pas être utilisée dans les instructions DDL par d'autres sessions jusqu'à la fin de la transaction.
Cela étant dit, vous devez déterminer si une autre session DB détient ou non des verrous sur la table. Si une telle session est une transaction inachevée, c'est là que le blocage peut se produire.
Si vous avez simplement besoin de l'espace disque rapidement, vous pouvez exécuter TRUNCATE TABLE
.
SUGGESTION
Essayez de renommer la table avant d'essayer de la supprimer comme suit:
ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
foo
renamefootodrop
foo
. Une fois que toutes ces connexions ont été établies, leALTER TABLE
peut continuer.Vous devez trouver quelle requête provoque un verrouillage de transaction en exécutant:
et voir une section nommée
TRANSACTION
. Plus tard, vous devez tuer cette requête pour supprimer une base de données.Référence: Comment savoir quelle transaction provoque un état «En attente de verrouillage des métadonnées de table»?
la source