Hay una configuración que se introdujo en MySQL 5.5.30: innodb_print_all_deadlocks
Cuando esta opción está habilitada, la información sobre todos los puntos muertos en las transacciones de usuario de InnoDB se registra en el registro de errores de mysqld. De lo contrario, verá información sobre el último punto muerto, utilizando el comando SHOW ENGINE INNODB STATUS. Un punto muerto ocasional de InnoDB no es necesariamente un problema, porque InnoDB detecta la condición inmediatamente y revierte una de las transacciones automáticamente. Puede usar esta opción para solucionar el problema de los puntos muertos si una aplicación no cuenta con la lógica de manejo de errores adecuada para detectar la reversión y volver a intentar su operación. Un gran número de puntos muertos podría indicar la necesidad de reestructurar las transacciones que emiten sentencias DML o SELECT ... FOR UPDATE para varias tablas, de modo que cada transacción acceda a las tablas en el mismo orden, evitando así la condición de punto muerto.
Simplemente agregue esta configuración a my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
o
[mysqld]
innodb_print_all_deadlocks = on
No tiene que reiniciar mysql. Simplemente inicie sesión en mysql y ejecute
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Esta configuración también es nueva para mí.
¡Pruébalo y dinos todo lo que piensas!