2012-06-03 69 views
15

当我尝试删除表时,MySQL挂起。我没有任何其他公开会议。如何解决这个问题?我已经等了10个小时,这个过程还没有结束。删除表使MySQL挂起

+1

请发布SHOW ENGINE INNODB STATUS的结果,如果数据库是根据课程的InnoDB的 – Sebas

+0

看起来像你正试图将表drop已经在使用中(呃,我的意思是它已被其他进程锁定),因此它正在等待进程提交。 – Rahul

+0

我已经添加了日志输出。 –

回答

12
Waiting for table metadata lock 
drop table tableA name 

SELECT l1.lat, l1.lon, l2.zipcode FROM tableA l1, tableBl2 where l1.lat = l2.latitude and l1.lon = l2.longitude limit 10 

如果这是你的表格,请参阅this link

你有一个隐含的僵局。终止其他交易以释放掉,或者终止释放其他交易。您可以在sql_plus中使用KILL thread_id。


由于我想出了另一个有趣的经验,我添加了更多信息。

Metadata死锁同样可以在DDL操作之间在给定的表(dropalter ...)和该表的选择查询发生。

是,select。因此,如果您在mysql(或php,例如pdo::fetch)中循环游标并且在同一个表上运行ddl语句,则会发生死锁。

这种非典型场景的一种解决方案是在任何select语句被完全获取后,系统地释放带有commit语句的隐式锁。

+0

我丢弃了表格,现在我无法创建新表格,因为我收到了错误代码(28):无法将文件'..'同步到磁盘。我假设通过放弃桌子我会有更多的自由空间。 –

+0

哪些文件?我认为你应该重启服务器,因为这个锁持续了很长时间。 – Sebas

+1

当我运行一个非常大的创建表语句与多列我得到这个错误信息。通过重新启动服务器,你的意思是退出并重新连接?你如何明确重启服务器? –

12

重新启动MySQL的可能不是最漂亮的解决方案,但它为我工作:

sudo /etc/init.d/mysql restart 
mysqladmin drop YOURDATABASE 
+0

'mysql.server restart'适用于我。 –