第一步,查出已鎖的進(jìn)程
成都創(chuàng)新互聯(lián)公司專注于積石山保安族東鄉(xiāng)族企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。積石山保安族東鄉(xiāng)族網(wǎng)站建設(shè)公司,為積石山保安族東鄉(xiāng)族等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
查看正在鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
``
查看等待鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
``
INNODB_TRX表主要是包含了正在InnoDB引擎中執(zhí)行的所有事務(wù)的信息,包括waiting for a lock和running的事務(wù)
select * from information_schema.innodb_trx
``
第二步,kill進(jìn)程
show engin innodb status; //最后一次死鎖信息及sql
show open tables where in_use 0 //查看鎖表
1.查看表被鎖狀態(tài)
2.查看造成死鎖的sql語句
3.查詢進(jìn)程
4.解鎖(刪除進(jìn)程)
5.查看正在鎖的事物? (8.0以下版本)
6.查看等待鎖的事物?(8.0以下版本)
1. 使用終端或命令提示符登錄到MySQL,輸入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p?
解釋:xxxx.xxx.xxx是數(shù)據(jù)庫IP地址,username是數(shù)據(jù)庫用戶名,輸入命令后,會讓你輸入username對應(yīng)的密碼,就可以登錄了
2. 如何查看MySQL數(shù)據(jù)庫的死鎖信息?
在MySQL客戶端下輸入命令:?
show engine innodb status \G;?
3. 如何定位MySQL數(shù)據(jù)庫的死鎖信息?
在打印出來的信息中找到“LATEST DETECTED DEADLOCK”一節(jié)內(nèi)容,看圖中紅線?
4. 如何分析日志,定位死鎖原因?
看3里面的圖,紫色劃線部分?
分析:?
事務(wù)1,等待?
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,這個位置的X鎖?
事務(wù)2,持有?
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖?
事務(wù)2,等待這個地方的X鎖?
理論上這個事務(wù)2是可以提交的不會,死鎖,但是這個事務(wù)日志只打印最后一部分死鎖,信息,這里面隱含的條件是,事務(wù)1也持有?
RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖,這樣,事務(wù)2不能加X鎖,同時事務(wù)1也不能加X鎖,產(chǎn)生死鎖。