In MySQL 5.5.30 wurde eine Einstellung eingeführt: innodb_print_all_deadlocks
Wenn diese Option aktiviert ist, werden Informationen zu allen Deadlocks in InnoDB-Benutzertransaktionen im mysqld-Fehlerprotokoll aufgezeichnet. Andernfalls werden mit dem Befehl SHOW ENGINE INNODB STATUS nur Informationen zum letzten Deadlock angezeigt. Ein gelegentlicher InnoDB-Deadlock ist nicht unbedingt ein Problem, da InnoDB den Zustand sofort erkennt und eine der Transaktionen automatisch zurücksetzt. Mit dieser Option können Sie möglicherweise Fehler beheben, warum Deadlocks auftreten, wenn eine Anwendung nicht über die entsprechende Fehlerbehandlungslogik verfügt, um das Rollback zu erkennen und den Vorgang erneut zu versuchen. Eine große Anzahl von Deadlocks weist möglicherweise auf die Notwendigkeit hin, Transaktionen, die DML- oder SELECT ... FOR UPDATE-Anweisungen für mehrere Tabellen ausgeben, neu zu strukturieren, sodass jede Transaktion in derselben Reihenfolge auf die Tabellen zugreift, wodurch die Deadlock-Bedingung vermieden wird.
Fügen Sie einfach diese Einstellung hinzu my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
oder
[mysqld]
innodb_print_all_deadlocks = on
Sie müssen MySQL nicht neu starten. Melden Sie sich einfach bei MySQL an und führen Sie es aus
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Diese Einstellung ist auch für mich neu.
Probieren Sie es aus und sagen Sie uns alles, was Sie denken !!!
mysql.user
und ausführen könnenFLUSH PRIVILEGES;
.