Существует настройка, которая была введена в MySQL 5.5.30: innodb_print_all_deadlocks
Когда эта опция включена, информация обо всех взаимоблокировках в пользовательских транзакциях InnoDB записывается в журнал ошибок mysqld. В противном случае вы видите информацию только о последней тупиковой ситуации, используя команду SHOW ENGINE INNODB STATUS. Случайный тупик InnoDB не обязательно является проблемой, потому что InnoDB немедленно обнаруживает условие и автоматически откатывает одну из транзакций. Вы можете использовать эту опцию, чтобы выяснить причину возникновения взаимоблокировок, если у приложения нет соответствующей логики обработки ошибок, чтобы обнаружить откат и повторить его работу. Большое количество взаимоблокировок может указывать на необходимость реструктуризации транзакций, которые выдают операторы DML или SELECT ... FOR UPDATE для нескольких таблиц, чтобы каждая транзакция обращалась к таблицам в одном и том же порядке, избегая, таким образом, условия взаимоблокировки.
Просто добавьте этот параметр в my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
или
[mysqld]
innodb_print_all_deadlocks = on
Вам не нужно перезапускать MySQL. Просто войдите в MySQL и запустите
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Этот параметр также является новым для меня.
Попробуйте и расскажет нам все, что вы думаете !!!
mysql.user
и запуститьFLUSH PRIVILEGES;
.