由于表显示正在等待元数据锁定,因此无法删除该表

ram*_*mya 13 mysql innodb mysql-5.5

我们正在尝试删除一张表,但它被挂起,当我们看到“SHOW PROCESSLIST”命令时,它显示为“正在等待元数据锁定”。即使我们无法对该特定表执行任何操作。有人知道如何解决吗?

Rol*_*DBA 8

如果通过 SELECT 或 DML(INSERT、UPDATE、DELETE)访问 InnoDB 表,您应该正确地期望元数据锁定。

根据有关元数据锁定MySQL 文档

为确保事务可串行化,服务器不得允许一个会话在另一个会话中未完成的事务中使用的表上执行数据定义语言 (DDL) 语句。服务器通过获取事务中使用的表的元数据锁并将这些锁的释放推迟到事务结束来实现这一点。表上的元数据锁可防止更改表的结构。这种锁定方法意味着一个会话中的事务正在使用的表不能在其他会话的 DDL 语句中使用,直到事务结束。

话虽如此,您应该确定另一个数据库会话是否持有表上的锁。如果这样的会话是未完成的事务,则可能存在阻塞。

如果您只是需要快速恢复磁盘空间,您可以运行TRUNCATE TABLE.

建议

在尝试删除它之前尝试重命名表,如下所示:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
Run Code Online (Sandbox Code Playgroud)


小智 8

您应该通过执行以下命令找到导致事务锁定的查询:

SHOW ENGINE INNODB STATUS
Run Code Online (Sandbox Code Playgroud)

并查看名为TRANSACTION. 稍后您应该终止该查询以删除数据库。

参考:如何找到导致“Waiting for table metadata lock”状态的事务?