簡體   English   中英

MySQL:“超過鎖定等待超時”

[英]MySQL: "lock wait timeout exceeded"

我正在嘗試從 MySQL 5.0.45 數據庫中刪除幾行:

delete from bundle_inclusions;

客戶端工作一段時間,然后返回錯誤:

Lock wait timeout exceeded; try restarting transaction

可能有一些未提交的事務在這個表上有一個鎖,但我需要這個過程來勝過任何這樣的鎖。 如何打破 MySQL 中的鎖?

我同意埃里克的觀點; TRUNCATE TABLE 是要走的路。 但是,如果由於某種原因您不能使用它(例如,如果您真的不想刪除表中的每一行),您可以嘗試以下選項:

  • 以較小的批次刪除行(例如 DELETE FROM bundle_inclusions WHERE id BETWEEN ? and ?)
  • 如果它是 MyISAM 表(實際上,這也適用於 InnoDB),請嘗試在 DELETE 之前發出 LOCK TABLE。 這應該保證您具有獨占訪問權限。
  • 如果是 InnoDB 表,那么超時發生后,使用 SHOW INNODB STATUS。 這應該能讓您深入了解鎖獲取失敗的原因。
  • 如果您有 SUPER 權限,您可以嘗試 SHOW PROCESSLIST ALL 查看其他連接(如果有)正在使用該表,然后使用 KILL 擺脫與您競爭的連接。

我相信還有很多其他的可能性; 我希望其中之一有幫助。

Linux:在mysql配置(/etc/my.cnf或/etc/mysql/my.cnf)中,插入/編輯這一行

innodb_lock_wait_timeout = 50

充分增加值(以秒為單位),重新啟動數據庫,執行更改。 然后恢復更改並重新啟動。

我有同樣的問題,一個沒有結束的流氓交易。 我重新啟動了 mysqld 進程。 您不需要截斷表。 您可能會丟失來自該惡意交易的數據。

猜測:截斷表 bundle_inclusions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM