MySQL:lock wait timeout exceeded; try restarting transactio解決方案

錯誤提示的意思,很明顯,是因爲這條語句被鎖住了。所以釋放這個鎖
我們可以到information_schema中查詢

解釋:information_schema這張數據表保存了MySQL服務器所有數據庫的信息。
如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。
再簡單點,這臺MySQL服務器上,到底有哪些數據庫、各個數據庫有哪些表,每張表的字段類型是什
麼,各個數據庫要什麼權限才能訪問,等等信息都保存在information_schema表裏面。

我們可以用下面三張表來查原因:
       innodb_trx 當前運行的所有事務
       innodb_locks  當前出現的鎖
       innodb_lock_waits  鎖等待的對應關係
  • 查看數據庫鎖id
    在這裏插入圖片描述
  • 圖中紅色語句爲佔用系統資源的語句,我們需要殺掉這個鎖,執行 kill 線程id號。上面這條記錄的id爲319618246
    所以我們執行:kill 319618246即可
    執行之後:
    在這裏插入圖片描述
    其他的記錄不需要關注,因爲其他的記錄狀態爲“RUNNING” 即正在執行的事務,並沒有鎖

擴展:表結構

desc information_schema.innodb_locks;

Field Type Null Key Default Remark
lock_id varchar(81) NO 鎖ID
lock_trx_id varchar(18) NO 擁有鎖的事務ID
lock_mode varchar(32) NO 鎖模式
lock_type varchar(32) NO 鎖類型
lock_table varchar(1024) NO 被鎖的表
lock_index varchar(1024) YES NULL 被鎖的索引
lock_space bigint(21) unsigned YES NULL 被鎖的表空間號
lock_page bigint(21) unsigned YES NULL 被鎖的頁號
lock_rec bigint(21) unsigned YES NULL 被鎖的記錄號
lock_data varchar(8192) YES NULL 被鎖的數據

desc information_schema.innodb_lock_waits

Field Type Null Key Default Remark
requesting_trx_id varchar(18) NO 請求鎖的事務ID
requested_lock_id varchar(81) NO 請求鎖的鎖ID
blocking_trx_id varchar(18) NO 當前擁有鎖的事務ID
blocking_lock_id varchar(81) NO 當前擁有鎖的鎖ID

desc information_schema.innodb_trx ;

Field Type Null Default Remark
trx_id varchar(18) NO 事務ID
trx_state varchar(13) NO 事務狀態:
trx_started datetime NO 0000-00-00 00:00:00 事務開始時間;
trx_requested_lock_id varchar(81) YES NULL innodb_locks.lock_id
trx_wait_started datetime YES NULL 事務開始等待的時間
trx_weight bigint(21) unsigned NO 0 #
trx_mysql_thread_id bigint(21) unsigned NO 0 事務線程ID
trx_query varchar(1024) YES NULL 具體SQL語句
trx_operation_state varchar(64) YES NULL 事務當前操作狀態
trx_tables_in_use bigint(21) unsigned NO 0 事務中有多少個表被使用
trx_tables_locked bigint(21) unsigned NO 0 事務擁有多少個鎖
trx_lock_structs bigint(21) unsigned NO 0 #
trx_lock_memory_bytes bigint(21) unsigned NO 0 事務鎖住的內存大小(B)
trx_rows_locked bigint(21) unsigned NO 0 事務鎖住的行數
trx_rows_modified bigint(21) unsigned NO 0 事務更改的行數
trx_concurrency_tickets bigint(21) unsigned NO 0 事務併發票數
trx_isolation_level varchar(16) NO 事務隔離級別
trx_unique_checks int(1) NO 0 是否唯一性檢查
trx_foreign_key_checks int(1) NO 0 是否外鍵檢查
trx_last_foreign_key_error varchar(256) YES NULL 最後的外鍵錯誤
trx_adaptive_hash_latched int(1) NO 0 #
trx_adaptive_hash_timeout bigint(21) unsigned NO 0 #
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章