#首先区分是锁超时还是死锁
-- 当前运行的所有事务
SELECT * FROM information_schema.INNODB_TRX;
-- 当前出现的锁
SELECT * FROM information_schema.INNODB_LOCKs;
-- 锁等待的对应关系
SELECT * FROM information_schema.INNODB_LOCK_waits;
-- 每个MySql线程的用户,地址以及操作的db等其他信息。
SELECT * FROM information_schema.PROCESSLIST;
-- 线程的信息 包括执行的sql信息(SQL_TEXT)
select * from performance_schema.events_statements_current
##数据库死锁排查方案1 --查看造成死锁服务器日志##
-- 找到状态为RUNNING的记录 拿到线程id:trx_mysql_thread_id
SELECT * FROM information_schema.INNODB_TRX;
-- 查询information_schema.processlist表 找到执行事务的客户端请求的SQL线程 拿到host
select * from information_schema.PROCESSLIST WHERE ID = 'trx_mysql_thread_id';
-- 根据端口和ip 到服务器查看相关的应用和日志
# netstat -nlatp | grep 23452
# ps -eaf | grep 12059
##数据库死锁排查方案2 -- 查看造成死锁的SQL信息##
-- 找到状态为RUNNING的记录 拿到线程id:trx_mysql_thread_id
SELECT * FROM information_schema.INNODB_TRX;
-- 根据线程id获取所有线程信息
select * from performance_schema.threads where PROCESSLIST_ID = 'trx_mysql_thread_id'
-- 根据线程id 从当前事件语句中获取到具体的执行sql
select * from performance_schema.events_statements_curren where THREAD_ID in
(select THREAD_ID from performance_schema.threads where PROCESSLIST_ID='trx_mysql_thread_id')