DEV WIKI
백엔드 · 오류·증상

Deadlock found when trying to get lock; try restarting transaction

MySQL 오류 1213을 잠금 대기 시간 초과 오류와 구분하고 교착 상태가 발생한 트랜잭션을 확인하는 방법을 설명합니다.

빠른 답변

우선 확인할 원인
MySQL 오류 1213은 InnoDB가 트랜잭션 사이의 교착 상태를 감지해 한 트랜잭션을 자동으로 롤백했다는 뜻입니다. 오류 번호 1213과 SQLSTATE 40001을 확인하고, 잠금 획득 순서가 코드 경로마다 다른지 비교해야 합니다.
먼저 확인할 항목
화면 또는 로그의 오류 번호가 `1213`인지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처
MySQL
출처 확인일
2026-08-29
최종 검토
2026-08-29
수정일
2026-08-29
관련 기술
오류·수정 제보 (새 창에서 열림)

현재 증상

  • 애플리케이션 오류 메시지

먼저 확인할 항목

화면 또는 로그의 오류 번호가 `1213`인지 확인합니다.

SQLSTATE가 `40001`인지 확인합니다.

오류 메시지가 `Deadlock found when trying to get lock; try restarting transaction`과 일치하는지 확인합니다.

오류가 발생한 시각과 해당 트랜잭션의 SQL 실행 순서를 기록합니다.

피해야 할 조치

주의

  • 오류 1205의 잠금 대기 시간 초과와 혼동하지 않습니다.
  • 중복 실행에 안전한지 확인하지 않은 트랜잭션을 자동 재시도하지 않습니다.
  • 소유자와 영향을 확인하지 않은 세션을 임의로 종료하지 않습니다.

환경별 원인과 조치

오류 식별

다음 세 값을 함께 확인합니다.

  • 오류 번호 1213
  • SQLSTATE 40001
  • 오류 메시지 Deadlock found when trying to get lock; try restarting transaction

세 값이 일치하면 MySQL ER_LOCK_DEADLOCK입니다. 오류가 난 시각, 트랜잭션 안에서 실행한 SQL 순서, 대상 테이블을 기록합니다. SQL 값에 포함된 개인정보와 인증 정보는 제거합니다.

오류 1205와 차이

구분오류 1213오류 1205
조건InnoDB가 교착 상태를 감지함행 잠금을 설정된 시간 안에 얻지 못함
SQLSTATE40001HY000
기본 롤백 범위선택된 트랜잭션 전체기다리던 SQL 문
첫 확인트랜잭션별 잠금 획득 순서대기·차단 트랜잭션과 잠금 보유 시간

오류 1205라면 Lock wait timeout exceeded; try restarting transaction 문서를 확인합니다.

확인 순서

  1. 오류가 난 트랜잭션의 SQL 실행 순서를 기록합니다.
  2. 같은 행 또는 테이블을 갱신하는 다른 트랜잭션의 실행 순서와 비교합니다.
  3. 코드 경로마다 같은 자원을 서로 다른 순서로 잠그는지 확인합니다.
  4. 긴 트랜잭션 안에 외부 API 호출이나 파일 처리처럼 데이터베이스 밖의 작업이 포함됐는지 확인합니다.
  5. 잠금 획득 순서를 일관되게 수정한 뒤 같은 동시 실행 조건에서 재발 여부를 확인합니다.

MySQL은 교착 상태에서 선택한 트랜잭션을 자동으로 롤백합니다. 재시도는 트랜잭션 전체 작업이 중복 실행돼도 안전한지 확인한 뒤 제한된 횟수와 간격으로 적용합니다.

출처

참고 자료

MySQL :: MySQL 8.4 Error Reference :: 2 Server Error Message Reference (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: 오류 번호 1213의 Symbol은 ER_LOCK_DEADLOCK이고 SQLSTATE는 40001입니다., 오류 메시지는 "Deadlock found when trying to get lock; try restarting transaction"입니다., InnoDB는 교착 상태를 감지하면 한 트랜잭션을 자동으로 롤백합니다., 교착 상태가 반복되면 트랜잭션 사이의 잠금 획득 순서를 일관되게 구성해야 합니다. · 확인일: 2026-08-29