Answers:
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;
。