查看MySQL數(shù)據(jù)庫的死鎖日志
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供屯昌網(wǎng)站建設(shè)、屯昌做網(wǎng)站、屯昌網(wǎng)站設(shè)計(jì)、屯昌網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、屯昌企業(yè)網(wǎng)站模板建站服務(wù),十多年屯昌做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1. 使用終端或命令提示符登錄到MySQL,輸入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p?解釋:xxxx.xxx.xxx是數(shù)據(jù)庫IP地址,username是數(shù)據(jù)庫用戶名,輸入命令后,會(huì)讓你輸入username對(duì)應(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`,這個(gè)位置的X鎖?事務(wù)2,持有?RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個(gè)地方的S鎖?事務(wù)2,等待這個(gè)地方的X鎖?理論上這個(gè)事務(wù)2是可以提交的不會(huì),死鎖,但是這個(gè)事務(wù)日志只打印最后一部分死鎖,信息,這里面隱含的條件是,事務(wù)1也持有?RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個(gè)地方的S鎖,這樣,事務(wù)2不能加X鎖,同時(shí)事務(wù)1也不能加X鎖,產(chǎn)生死鎖。
第一步,查出已鎖的進(jìn)程
查看正在鎖的事務(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、查詢是否鎖表
show OPEN TABLES where In_use 0;
查詢到相對(duì)應(yīng)的進(jìn)程 === 然后 kill id
2、查詢進(jìn)程
show processlist
補(bǔ)充:
查看正在鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;