mysql错误汇总(不定期更新)

navicat一直正在保存中,Waiting for table metadata lock

说下出现的原因:

  • 我项目正在运行->
  • 其中跑了个接口->
  • 接口里面有个断点->
  • 导致事务未能提交->
  • 我同时又去navicat中修改了该接口访问的表的数据接口->
  • 点navicat保存的时候保存不下来,一直显示正在保存中

这种问题肯定有前人犯过错,所以一番查询,终于解决:

1.进入sql的命令行模式,我这里通过navicat右键数据库选择命令列界面进入,
执行show processlist;这里用网上别人的图片展示(我自己的已经解决了问题了囧)


确认有Waiting for table metadata lock,有表被锁住了.
2.我回想了下自己的操作,确认有事务未提交,这里就要去找哪个事务未提交

在Mysql5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎);
  innodb_trx ## 当前运行的所有事务

  innodb_locks ## 当前出现的锁

  innodb_lock_waits ## 锁等待的对应关系

## 产生事务,在innodb_trx就有数据 ;
mysql> select * from information_schema.innodb_trx G;

如果没有产生锁等待,innodb_lock_waits 和innodb_locks 中没有数据

如果产生所等待,查询这三张表,找到对应线程,杀掉。

注意那个大写G,我自己找的时候没有写G,网上有人的写法里有个\G,这个会出语法错误,不能带有反斜杠

如果出现了未提交的事务,结果会出现一张表


注意去找

TRX_MYSQL_THREAD_ID MySQL线程ID,与show processlist中的ID值相对应

这个id可以在show processlist;中也找到,是相对应的.

这时候只需要 kill <#你要杀死的线程id#>即可

参考链接:
数据库事务和锁
# 排查MySQL事务没有提交导致 锁等待 Lock wait timeout exceeded

ps: 最近的这家公司,进去做swift项目,直播类型,很有活力,同事也不错(比我厉害还比我努力o(╥﹏╥)o),就是项目框架封装挺多的,,需要花时间去读框架,然而公司又在重构项目,最近一段时间都不能去搞爪哇了囧,移动端其实也很有意思,不过我之前待的公司太养老了,没机会接触新技术

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容