方法1:利用 metadata_locks 視圖
創新互聯公司專注于網站建設|網站建設維護|優化|托管以及網絡推廣,積累了大量的網站設計與制作經驗,為許多企業提供了網站定制設計服務,案例作品覆蓋成都玻璃貼膜等行業。能根據企業所處的行業與銷售的產品,結合品牌形象的塑造,量身開發品質網站。
此方法僅適用于 MySQL 5.7 以上版本,該版本 performance_schema 新增了 metadata_locks,如果上鎖前啟用了元數據鎖的探針(默認是未啟用的),可以比較容易的定位全局鎖會話。
方法2:利用 events_statements_history 視圖此方法適用于 MySQL 5.6 以上版本,啟用 performance_schema.eventsstatements_history(5.6 默認未啟用,5.7 默認啟用),該表會 SQL 歷史記錄執行,如果請求太多,會自動清理早期的信息,有可能將上鎖會話的信息清理掉。
方法3:利用 gdb 工具如果上述兩種都用不了或者沒來得及啟用,可以嘗試第三種方法。利用 gdb 找到所有線程信息,查看每個線程中持有全局鎖對象,輸出對應的會話 ID,為了便于快速定位,我寫成了腳本形式。也可以使用 gdb 交互模式,但 attach mysql 進程后 mysql 會完全 hang 住,讀請求也會受到影響,不建議使用交互模式。
方法4:show processlist
如果備份程序使用的特定用戶執行備份,如果是 root 用戶備份,那 time 值越大的是持鎖會話的概率越大,如果業務也用 root 訪問,重點是 state 和 info 為空的,這里有個小技巧可以快速篩選,篩選后嘗試 kill 對應 ID,再觀察是否還有 wait global read lock 狀態的會話。
方法5:重啟試試!
一:檢查是否鎖表, 查詢進程并殺死進程
1) 查詢是否鎖表
show open tables where in_use 0;
2) 查詢進程(如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程)
show processlist;
二:查看在鎖事務,殺死事務對應的線程ID
1) 查看正在鎖的事務
select * from information_schema.INNODB_LOCKS;
2) 殺死進程id(就是[select * from information_schema.INNODB_LOCKS; ]命令的trx_mysql_thread_id列)
kill 線程ID
3) 查看等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
其它:
1) 查看服務器狀態
show status like '%lock%';
2) 查看超時時間:
show variables like '%timeout%';
查看MySQL數據庫的死鎖日志
1. 使用終端或命令提示符登錄到MySQL,輸入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p?解釋:xxxx.xxx.xxx是數據庫IP地址,username是數據庫用戶名,輸入命令后,會讓你輸入username對應的密碼,就可以登錄了
2. 如何查看MySQL數據庫的死鎖信息?在MySQL客戶端下輸入命令:?show engine innodb status \G;
3. 如何定位MySQL數據庫的死鎖信息?在打印出來的信息中找到“LATEST DETECTED DEADLOCK”一節內容,看圖中紅線
4. 如何分析日志,定位死鎖原因?看3里面的圖,紫色劃線部分?分析:?事務1,等待?RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,這個位置的X鎖?事務2,持有?RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖?事務2,等待這個地方的X鎖?理論上這個事務2是可以提交的不會,死鎖,但是這個事務日志只打印最后一部分死鎖,信息,這里面隱含的條件是,事務1也持有?RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖,這樣,事務2不能加X鎖,同時事務1也不能加X鎖,產生死鎖。
第一步,查出已鎖的進程
查看正在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
``
查看等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
``
INNODB_TRX表主要是包含了正在InnoDB引擎中執行的所有事務的信息,包括waiting for a lock和running的事務
select * from information_schema.innodb_trx
``
第二步,kill進程
show engin innodb status; //最后一次死鎖信息及sql
show open tables where in_use 0 //查看鎖表
網頁題目:mysql鎖怎么看 mysql 鎖查看
標題路徑:http://vcdvsql.cn/article24/dopicje.html
成都網站建設公司_創新互聯,為您提供做網站、網站策劃、外貿建站、面包屑導航、全網營銷推廣、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯