zoukankan      html  css  js  c++  java
  • 记一次MySQL出现Waiting for table metadata lock的原因、排查过程与解决方法

    任务背景:将sql文件通过shell直接导入到mysql中执行(还原)

    bug表现:导入后java项目卡死

    过程:

      1.网上乱搜一通,无意间看到一篇文章,这篇文章说明了如何开启mysql的general_log,这个命令执行后可以打印mysql中执行的语句

      2.又乱搜一通,看到一个命令:show processlist,此命令可查看当前mysql的运行状态的详细信息,在mysql命令行执行后能看到当前卡住的详细信息:Waiting for table metadata lock

    分析:

      lock这个词就很关键了,必定是因为某些操作导致锁住了表或者行,才导致了接下来我要做的操作(删除表drop table A<Innodb, REPEATABLE-READ>)卡死,

      通过general_log,可以看到在做还原功能时先查询了一次table A,接着再做导入操作就卡死了。

    解决:

      分析到这就很简单了,把查询操作替换成另一种可实现的方式就好了,具体做法因人而异,就不需我细说了。

    后话:

      需要了解一下Innodb、REPEATABLE-READ的含义

  • 相关阅读:
    DOM_节点操作创建表格
    表单提交
    HTML常用标签
    网络通讯详解
    java===TCP(多线程多客户端同时上传字节数据:图片为例)
    java===TCP(文件上传功能)
    java===UDP
    java==IO=随机读写文件
    git中的基本命令
    ansible中roles的简单使用
  • 原文地址:https://www.cnblogs.com/woooodlin/p/13494221.html
Copyright © 2011-2022 走看看