異常問題截圖:
具體原因分析
這個問題發生在開發環境,懷疑是提交事務時終止專案執行,沒有提交該事務,造成死鎖
除錯該事務時時間太長,為什麼說有這個原因呢,因為透過查詢日誌顯示
The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.
問題排查
# 當前執行的所有事務 select * from information_schema.innodb_trx; # 檢視鎖的持有和請求情況 MySQL8.0 select * from performance_schema.data_locks; # 檢視鎖的等待情況 MySQL8.0 select * from performance_schema.data_lock_waits; # 當前執行緒詳情 show full processlist;
1.發現事務id176602一直在執行狀態
鎖的持有和請求情況
kill 掉事務關聯的mysql執行緒ID (trx_mysql_thread_id)
KILL 362
trx_mysql_thread_id = 0 無法Kill 接著排查
確認 trx_mysql_thread_id = 0 為XA(分散式)事務
執行回滾操作
#檢視XA事務資訊 xa recover; #執行報錯可能沒有許可權 GRANT XA_RECOVER_ADMIN ON *.* TO root@'%' ;
得到
回滾XA事務操作
# XA事務回滾命令的格式: xa rollback 'left(data,gtrid_length)','substr(data,gtrid_length+1,bqual_length)', formatID; #示列 SELECT left('55f3cdd8-4f45-49c8-bbca-2738fa5a1514:35',38); SELECT substr('55f3cdd8-4f45-49c8-bbca-2738fa5a1514:35',39,1); xa rollback '55f3cdd8-4f45-49c8-bbca-2738fa5a1514:3', '5',1;