2013-06-19 32 views
0

我有一個查詢,我在我自己的計算機上的Mysql工作臺上執行,數據庫在遠程計算機上。1205錯誤:表很長時間後仍然鎖定

經過一段時間我得到了一個2013年的錯誤(在查詢期間與MySQL服務器失去連接),查詢沒有任何效果。後來我嘗試了一些不同的查詢,我總是有一個:

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction 

這是否意味着我執行的查詢(在此期間,連接丟失了)還是鎖定了表,如果是這樣我怎麼能釋放表。自第一次查詢以來已經過了三個小時。

1205 admin_pw BSN-176-177-215.dial-up.dsl.siol.net:9054 admin_pw Query 11217 Sending data DELETE n1 FROM mm_ads_fields_values n1, mm_ads_fields_values n2 
WHERE n1.id < n2.id 
AND n1.aid = n2 
1206 admin_pw BSN-176-177-215.dial-up.dsl.siol.net:9100 admin_pw Sleep 415  
1208 admin_pw BSN-176-177-215.dial-up.dsl.siol.net:9281 admin_pw Query 622 Locked ALTER IGNORE TABLE mm_ads_fields_values ADD UNIQUE KEY idx1(aid,value) 
1308 admin_pw localhost  Sleep 30  
1309 admin_pw BSN-176-177-215.dial-up.dsl.siol.net:16938 admin_pw Query 0  show processlist 

秀SHOW PROCESSLIST的輸出,即得到了2013的錯誤第一次查詢是一個id爲1205

+0

什麼是mysql> show processlist;輸出?另外,你在什麼操作系統? Windows或Linux – apesa

+0

數據庫在Linux上運行。我使用Windows。 –

+0

好的,告訴我什麼show processlist說,你從那裏開始。殺死進程可能依賴於操作系統在CLI – apesa

回答

1

好,使用從SHOW PROCESSLIST的輸出,你可以看到PID 1208有你的表鎖定。在沙箱中,你可以殺死所有東西然後回去工作。但在現實生活中,你會想要殺死擁有該鎖的PID,並允許剩餘的查詢執行。使用你上面的輸出將在MySQL

mysql> kill 1208; 

運行此執行以下語句爲根,然後看看你的其他查詢完整。如果他們不,並再次鎖定。重複上述過程,然後重新訪問您的SQL。

+0

感謝您的幫助。雖然開始所有這些的查詢是1205,但是我首先殺了這個,1208的那個在那之後根本就不存在了。無論如何它現在有效。 –