今天mysql数据库执行 insert update操作均出现了 Lock wait timeoutexceeded; try restarting transaction 错误
原因是因为某条sql语句执行了,但是没有进行commit提交事物,导致后面的 更新,插入操作均出现锁等待超时。下面说下解决方法
查询出 mysql 未关闭的的事务有哪些:
SELECT
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.USER,
b.HOST,
b.db,
b.command,
b.time,
b.state,
b.info
FROM
information_schema.innodb_trx a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
WHERE
b.command = 'sleep';
发现有两条数据,显示的事物状态一直都是RUNNING,trx_started 显示时间从一个小时之前就开始了
也可以执行 SELECT * from information_schema.INNODB_TRX; 查询mysql事务情况
解决方法:
根据trx_mysql_thread_id去 information_schema库的procelllist表查询出一直RUNNING的sql线程是哪个客户端请求的
执行: select * from information_schema.PROCESSLIST where id = 403
能够查询出HOST为我们公司自己的外网IP,原来发现是自己在navcat模拟多人刷门票导致的没有手动commit导致的。
kill 掉 trx_mysql_thread_id 即可。
执行:kill 403;
网友评论