Respuestas:
Si se accede a una tabla InnoDB a través de SELECT o DML (INSERT, UPDATE, DELETE), debería esperar un bloqueo de metadatos.
De acuerdo con la documentación de MySQL sobre el bloqueo de metadatos :
Para garantizar la serialización de la transacción, el servidor no debe permitir que una sesión realice una instrucción de lenguaje de definición de datos (DDL) en una tabla que se utiliza en una transacción incompleta en otra sesión. El servidor logra esto mediante la adquisición de bloqueos de metadatos en las tablas utilizadas dentro de una transacción y aplazando la liberación de esos bloqueos hasta que finalice la transacción. Un bloqueo de metadatos en una tabla evita cambios en la estructura de la tabla. Este enfoque de bloqueo implica que una tabla que está siendo utilizada por una transacción dentro de una sesión no puede ser utilizada en sentencias DDL por otras sesiones hasta que finalice la transacción.
Dicho esto, debe determinar si otra sesión de DB tiene bloqueos en la mesa. Si dicha sesión es una transacción incompleta, es posible que haya una demora.
Si simplemente necesita recuperar rápidamente el espacio en disco, puede ejecutarlo TRUNCATE TABLE
.
Intente renombrar la tabla antes de intentar soltarla de la siguiente manera:
ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
foo
. Una vez que se hicieron todas esas conexiones, entonces ALTER TABLE
puede continuar.
Debería encontrar qué consulta causa un bloqueo de transacción ejecutando:
SHOW ENGINE INNODB STATUS
y ver una sección llamada TRANSACTION
. Más tarde, debe eliminar esa consulta para descartar una base de datos.
Referencia: ¿Cómo encuentro qué transacción está causando un estado de "Esperando bloqueo de metadatos de tabla"?
foo
renamefootodrop