2012-06-03 101 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'適用於我。 –