• 记一次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的含义

  • 相关阅读:
    [SDOI2011]消防
    10.15 上午 考试
    松鼠搬家 ( 切比雪夫距离 到 曼哈顿距离 )
    10.14 上午 考试
    10.13 下午
    bzoj2640 元素 线性基+贪心
    猪国杀 大模拟
    10.13 上午 考试
    10.12 两次考试
    阿狸和桃子的游戏
  • 原文地址:https://www.cnblogs.com/woooodlin/p/13494221.html
Copyright © 2020-2023  润新知