#锁请求超时时间(秒)
innodb_lock_wait_timeout=60
备注:InnoDB行锁等待超时默认为50秒,一般建议设置5-10秒就够了;
#事务中某个语句锁请求超时将回滚整个事务
innodb_rollback_on_timeout=1
备注:默认在innodb_lock_wait_timeout超时后,只会回滚当前语句,造成不一致,开启后会回滚整个事务。
#开启/关闭死锁检测
nnodb_deadlock_detect=on/off
备注:默认是on,死锁检测会带来性能方面的影响,因此高并发场景下选择关闭。打开innodb_rollback_on_timeout,并配置innodb_lock_wait_timeout。
#死锁信息都保存到错误日志
innodb_print_all_deadlocks=1
常用的锁相关的指令语句#查看当前连接mysqlshowprocesslist;mysqlshowfullprocesslist;mysqlSELECT*FROMINFORMATION_SCHEMA.PROCESSLIST#查看当前正在被锁的事务(锁请求超时后则查不到)
mysqlSELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;#查看当前等待锁的事务(锁请求超时后则查不到)
mysqlSELECT*FROMINFORMATION_SCHEMA.INNODB_LOCK_WAITS;#查看当前未提交的事务(如果死锁等待超时,事务可能还没有关闭)
mysqlSELECT*FROMINFORMATION_SCHEMA.INNODB_TRX;#查看正在被访问的表
mysqlshowOPENTABLESwhereIn_use0;#查看最近一个死锁情况mysqlSHOWENGINEINNODBSTATUS\G;日志相关查看error日志的路径
mysqlshowvariableslike"%log_error%";
打开binlog
#打开binlog
log-bin=/var/log/mysql/mysql-bin/logbin.log
#配置serverid
server-id=1
解析binlog文件
mysqlbinlog[options]log-files
死锁的几种场景见如下文章: