How to Fix MySQL ERROR 1213: Deadlock Found When Trying to Get Lock

intermediate🗄️ MySQL2026-04-12| MySQL 5.7+, MySQL 8.0+, MariaDB, Linux (Ubuntu/CentOS), Docker, AWS RDS, Google Cloud SQL.

Error Message

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
#mysql#deadlock#database-optimization#innodb#sql-performance

The Error Message

In high-traffic applications, you might see your database operations suddenly fail with this specific message:

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

What exactly is a Deadlock?

A deadlock is essentially a "Mexican standoff" between database processes. It happens when Transaction A holds a lock on Row 1 and wants Row 2, while Transaction B holds a lock on Row 2 and wants Row 1. Neither can move forward.

MySQL doesn't just hang forever. It detects the stalemate and kills one of the transactions—the "victim"—so the other can finish. This isn't a bug in the InnoDB engine. It is a protective measure to keep your database responsive, though frequent deadlocks usually signal flaws in your application logic.

Step-by-Step Fixes

1. Implement Application-Level Retry Logic

The error message is quite literal: "try restarting transaction." In high-concurrency systems, deadlocks are sometimes unavoidable. Your code should expect this error and attempt the operation again after a brief pause.

Here is a practical retry pattern using an exponential backoff (Node.js/Python style):

max_retries = 3
retries = 0

while retries  100` is much more dangerous than locking `WHERE id IN (101, 102, 103)`.
  - **Batching:** If you need to update 10,000 rows, do it in chunks of 100 or 500. This releases locks faster and prevents a single massive transaction from blocking the entire system.

Related Error Notes