Il y a un paramètre qui a été introduit dans MySQL 5.5.30: innodb_print_all_deadlocks
Lorsque cette option est activée, les informations sur tous les blocages dans les transactions utilisateur InnoDB sont enregistrées dans le journal des erreurs mysqld. Sinon, vous voyez uniquement des informations sur le dernier blocage, à l'aide de la commande SHOW ENGINE INNODB STATUS. Un blocage occasionnel d'InnoDB n'est pas nécessairement un problème, car InnoDB détecte immédiatement la condition et annule automatiquement l'une des transactions. Vous pouvez utiliser cette option pour résoudre les problèmes de blocage si une application ne dispose pas d'une logique de gestion des erreurs appropriée pour détecter la restauration et réessayer son fonctionnement. Un grand nombre de blocages peut indiquer la nécessité de restructurer les transactions qui émettent des instructions DML ou SELECT ... FOR UPDATE pour plusieurs tables, afin que chaque transaction accède aux tables dans le même ordre, évitant ainsi la condition de blocage.
Ajoutez simplement ce paramètre à my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
ou
[mysqld]
innodb_print_all_deadlocks = on
Vous n'avez pas besoin de redémarrer mysql. Connectez-vous simplement à mysql et lancez
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Ce paramètre est nouveau pour moi aussi.
Essayez-le et dites-nous tout ce que vous pensez !!!
mysql.user
et exécuterFLUSH PRIVILEGES;
.