Lock wait timeoutexceeded; try restarting transaction

今天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;

你可能感兴趣的:(Lock wait timeoutexceeded; try restarting transaction)