Risposte:
C'è un'impostazione introdotta in MySQL 5.5.30: innodb_print_all_deadlocks
Quando questa opzione è abilitata, le informazioni su tutti i deadlock nelle transazioni degli utenti di InnoDB vengono registrate nel registro degli errori mysqld. In caso contrario, vengono visualizzate informazioni solo sull'ultimo deadlock, utilizzando il comando SHOW ENGINE INNODB STATUS. Un deadlock occasionale di InnoDB non è necessariamente un problema, poiché InnoDB rileva immediatamente la condizione e ripristina automaticamente una delle transazioni. È possibile utilizzare questa opzione per risolvere il motivo per cui si verificano deadlock se un'applicazione non dispone di una logica di gestione degli errori appropriata per rilevare il rollback e riprovare a eseguire l'operazione. Un gran numero di deadlock potrebbe indicare la necessità di ristrutturare le transazioni che emettono istruzioni DML o SELECT ... FOR UPDATE per più tabelle, in modo che ogni transazione acceda alle tabelle nello stesso ordine, evitando così la condizione di deadlock.
Aggiungi questa impostazione a my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
o
[mysqld]
innodb_print_all_deadlocks = on
Non è necessario riavviare mysql. Accedi a mysql ed esegui
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Questa impostazione è nuova anche per me.
Fai una prova e ci dice tutto quello che pensi !!!
mysql.user
ed eseguire FLUSH PRIVILEGES;
.