n1ro°
RU

Ошибки · Решение

MySQL error 1213: Deadlock found

Две или больше транзакций удерживают ресурсы, нужные друг другу, поэтому дальнейшее ожидание не может завершиться само.

Редакция N1RO · Проверено

Короткий ответ

MySQL 1213 означает, что InnoDB обнаружил цикл ожидания locks и откатил одну транзакцию как victim. Сверьте код с официальной поддержкой производителя и выполните только безопасные шаги.

Что означает ошибка

Две или больше транзакций удерживают ресурсы, нужные друг другу, поэтому дальнейшее ожидание не может завершиться само.

Возможные причины

  • Разные code paths блокируют одинаковые строки в разном порядке.
  • Транзакции охватывают больше строк из-за отсутствующих индексов.
  • Параллельные batch-операции пересекаются по hot keys.

Что проверить

  • Посмотрите latest detected deadlock в `SHOW ENGINE INNODB STATUS`.
  • Запишите SQL и порядок locks обеих транзакций.
  • Проверьте, можно ли обновлять сущности в едином детерминированном порядке.

Безопасные шаги

  1. Добавьте retry всей транзакции с ограниченным backoff, потому что deadlock возможен даже в корректной системе.
  2. Сократите transaction scope и исправьте неэффективные scans.
  3. Унифицируйте порядок захвата ресурсов между конкурирующими операциями.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если частота 1213 растёт, DBA/разработчик должен анализировать deadlock traces, а не бесконечно увеличивать retry count.

Похожие ошибки

  • /errors/mysql-error-1005-cant-create-table/
  • /errors/mysql-error-1040-con-count-error/
  • /errors/mysql-error-1048-bad-null-error/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.