你用show processlist看看是哪些语句导致数据库锁死的,这种问题只能实际问题实际分析。

解决方案 »

  1.   

    同意 alamb(把握今生),“实际问题实际分析”1. 用show processlist看看是哪些语句导致数据库锁死
    2. 考虑检查一下所有锁表的操作
    3. 晚上是否有人操作这个数据库?如果在用,是否不适当的执行了锁表操作?
      

  2.   

    暂时解决:隔断时间执行一次 unlock tables; 可行!!再慢慢查原因,是否被人攻击;还是自己写的代码存在问题。
      

  3.   

    呵呵,to loveflea(coolwind):unlock 操作是线程(连接)相关的,线程1的unlock不能解除线程2的lock,它只能解除自己的表锁定!即不同的连接的unlock操作不能影响其它连接的lock
      

  4.   

    To lxf_1976(小木) Thanks.我试了一下,和你说的一样。我还以为用root就能解除所有锁定,结果不行!笨方法,呵呵!暂时解决:windows下隔断时间执行一次 
    net stop mysql
    net start mysqllinux下
    先 kill mysql的进程,再启动,hehe不知可行否?呵呵!
      

  5.   

    这个方法够绝啊,哈哈
    Linux下可以用
    ./mysqladmin -uroot shutdown -p
    来终止MYSQL
    不过,你可以写个程序,用showprocesslist ,找到被死锁的线程号
    Kill processNo
      

  6.   

    | 5313 | root | localhost             | NULL  | Query   | 0    | NULL  | show processlist |
    | 5482 | root | localhost.localdomain | test  | Sleep   | 186  |       | NULL             |
    | 5483 | root | localhost.localdomain | china | Sleep   | 185  |       | NULL             |
    | 5491 | root | localhost.localdomain | china | Sleep   | 139  |       | NULL             |
    | 5492 | root | localhost.localdomain | test  | Sleep   | 136  |       | NULL             |
    | 5493 | root | localhost.localdomain | test  | Sleep   | 123  |       | NULL             |
    | 5494 | root | localhost.localdomain | china | Sleep   | 120  |       | NULL             |
    | 5497 | root | localhost.localdomain | china | Sleep   | 120  |       | NULL             |
    | 5524 | root | localhost.localdomain | china | Sleep   | 9    |       | NULL             |
    | 5525 | root | localhost.localdomain | test  | Sleep   | 1    |       | NULL
      

  7.   

    要在数据库已经被死锁的时候show processlist出来看才有用