2012-06-05 114 views
6

我有一個MySQL InnoDB鎖,它阻止了用戶登錄。我現在不關心此鎖的原因 - 我只需要清除鎖而不需要重新啓動數據庫。殺死查詢過程不做FYI。有什麼建議麼?謝謝。需要清除MySQL InnoDB鎖而不重新啓動數據庫

+0

我與MyIsam有同樣的問題,我能夠通過修復表來解決它。我不知道這會有所幫助,但這是一個開始 –

+0

謝謝,但遺憾的是REPAIR TABLE並未與InnoDB一起使用。 – modulaaron

+0

使用CHECK TABLE並告訴我們輸出是什麼。 – Jocelyn

回答

12

這裏是我結束瞭解決問題:

mysql> show engine innodb status\G 
*************************** 1. row *************************** 
    Type: InnoDB 
    Name: 
Status: 
===================================== 
120710 18:05:37 INNODB MONITOR OUTPUT 
===================================== 
Per second averages calculated from the last 37 seconds 
---------- 
SEMAPHORES 
---------- 
OS WAIT ARRAY INFO: reservation count 208374, signal count 196902 
Mutex spin waits 0, rounds 39211638, OS waits 80663 
RW-shared spins 588505, OS waits 68505; RW-excl spins 3204502, OS waits 53586 
------------ 
TRANSACTIONS 
------------ 
Trx id counter 1 3626791829 
Purge done for trx's n:o < 1 3625948819 undo n:o < 0 0 
History list length 6754 
LIST OF TRANSACTIONS FOR EACH SESSION: 
... 
---TRANSACTION 1 3625948818, ACTIVE 2892 sec, process no 1981, OS thread id 140020625811200 
2 lock struct(s), heap size 368, 1 row lock(s), undo log entries 1 

>>>>> MySQL thread id 14982, query id 232584561 localhost dbuser 

Trx read view will not see trx with id >= 1 3625948819, sees < 1 3625948817 

mysql> kill 14982; 
Query OK, 0 rows affected (0.00 sec) 

注意與>>>>>行是MySQL線程ID被定義在那裏 - 這是這個線程應該被殺死。

請參閱this的帖子 - 非常有用。

+6

你會希望在MySQL 5.5及更高版本中使用'SHOW ENGINE INNODB STATUS \ G'('ENGINE'用於可選) – checkorbored