DBA日记 Waiting for table metadata lock

记一次莫名其妙的报错与解决:Waiting for table metadata lock;

报错步骤:

程序执行时突然报错

Lock wait timeout exceeded; try restarting transaction

Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactio

解决步骤:

-- 查看当前运行的所有事务:
select * from information_schema.innodb_trx;

-- 查看当前对应的MySQL帐户运行的线程:
-- 报错时state显示Waiting for table metadata lock;
-- 此时随便发起一个查询或修改都会报错;
show processlist;

-- 杀掉指定线程
KILL   33862493;

-- 通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中的事务。
-- 这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效,没有释放。
-- 从performance_schema.events_statements_current表中可以查到失败的语句。
select * from performance_schema.events_statements_current;

-- 一次性找到所有未完成的进行,并通过sql语句将其全部找到,然后统一杀死(万不得已,不建议这么做,基本就等于宁错杀一千也不放过一个)
select concat('kill ',trx_mysql_thread_id,';') as kill_id from information_schema.INNODB_TRX 
where trx_lock_structs=0 and trx_weight=0 and trx_rows_locked=0 
and trx_rows_modified=0 and trx_state='RUNNING';

-- 查看未提交事务 
-- 杀掉这个线程,问题解决(懵)
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBA日记 序 3 前言之DBA的性格 7 前言之我的成长之路 11 第一部(1) 5月11日 20 第一部 (2) 5月12日 22 第一部 (3) 5月13日 24 第一部 (4) 5月14日 26 第一部 (5) 5月15日 28 第一部 (6) 5月18日 31 第一部 (7) 5月19日 南京 33 第一部(8) 5月20日 临晨的邮件通知短信 37 第一部(9) 5月22日 ODS系统和RAC 39 第一部(10) 5月23日 实时ODS 41 第一部 (11) 5月24日 重返沈阳 44 第一部(12) 5月25日 46 第一部(13) 5月26 优化方案 48 第一部(14) 5月27日 无奈 50 第一部(15) 5月29 突破困局 52 第一部(16) 5月31日 实施优化 54 第一部(17) 6月6日 实施优化 56 第一部(18) 6月7日 突发事件 58 第一部(19) 6月10日 性能问题 60 第一部(20) 6月11日 例会 62 第一部(21) 6月12日 64 第一部(22) 6月13日 演戏 66 第一部(23) 6月14日 转机 68 第一部(24) 6月14日之二 cache buffer chains 72 第一部(25) 6月15日 青岛 74 第一部(26)之二 6月15日 青岛 78 第一部(27) 6月16日 青岛机场 80 第一部 (28) 6月17日 完美的效果 85 第一部 (29) 6月18日 准备收工 88 第一部(30) 6月19日 突然事件 90 第一部(31) 7月20日 重回沈阳 92 第一部(32) 7月21日 课堂风波 95 第一部(33) 7月23 世博园一日游和心想事成 98 第一部 7月23日夜 漫长的一夜 (第一部完) 101 后记1 结束语 108 后记2 优化项目的流程之方案 109

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值