Ошибки · Решение
MySQL error 1213: Deadlock found
Две или больше транзакций удерживают ресурсы, нужные друг другу, поэтому дальнейшее ожидание не может завершиться само.
Короткий ответ
MySQL 1213 означает, что InnoDB обнаружил цикл ожидания locks и откатил одну транзакцию как victim. Сверьте код с официальной поддержкой производителя и выполните только безопасные шаги.
Что означает ошибка
Две или больше транзакций удерживают ресурсы, нужные друг другу, поэтому дальнейшее ожидание не может завершиться само.
Возможные причины
- Разные code paths блокируют одинаковые строки в разном порядке.
- Транзакции охватывают больше строк из-за отсутствующих индексов.
- Параллельные batch-операции пересекаются по hot keys.
Что проверить
- Посмотрите latest detected deadlock в `SHOW ENGINE INNODB STATUS`.
- Запишите SQL и порядок locks обеих транзакций.
- Проверьте, можно ли обновлять сущности в едином детерминированном порядке.
Безопасные шаги
- Добавьте retry всей транзакции с ограниченным backoff, потому что deadlock возможен даже в корректной системе.
- Сократите transaction scope и исправьте неэффективные scans.
- Унифицируйте порядок захвата ресурсов между конкурирующими операциями.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если частота 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 не диагностировала ваш конкретный случай.