我的程序在执行mysql_real_query时会出现错误:Lost connection to MySQL server during query 
随后就是一大堆的
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) 注:相应的sql语句为select 绝对没有问题。这个错误有时候一个小时就有有时候要过好几天才会出现。
此时查看ps ax |grep mysql已经没有mysql进程。再看mysql对应的log(/var/log/mysqld.log)没有找到为什么为出现这个错误。
所以,有没有哪位知道出现这个问题的原因是什么?这个问题搞了很久都没有搞出来。环境:
CentOS 6.2
glibc 2.12
mysql 5.6.13

解决方案 »

  1.   

    数据库日志中值显示了
    130909 09:53:06 mysqld_safe Number of processes running now: 0
    130909 09:53:06 mysqld_safe mysqld restarted
    2013-09-09 09:53:13 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2013-09-09 09:53:13 31655 [Note] Plugin 'FEDERATED' is disabled.
    2013-09-09 09:53:13 31655 [Note] InnoDB: The InnoDB memory heap is disabled
    2013-09-09 09:53:13 31655 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
    2013-09-09 09:53:13 31655 [Note] InnoDB: Compressed tables use zlib 1.2.3
    ……
    ……
    我知道mysqld_safe Number of processes running now: 0这个是从mysqld_safe脚本里打印出来的,而mysqld_safe脚本就是发现mysqld进程不在之后才去通过ps ax 看mysql进程的个数。
    所以我觉得没法从mysql日志中获得mysql这个进程为什么会挂掉的原因。
      

  2.   

    检查一下系统变量 show variables like '%time%';一种可能就是超时了。
      

  3.   

    1. 检查允许连接个数是多少?
    2. 检查是否有Login 失败的情况出现?
    补充以上两点,都有机会造成的。
      

  4.   


    wait_timeout和interactive_timeout都是8小时,我的程序有些时候2个小时挂掉,有的甚至一个星期才挂掉,所以应该和这个timeout无关。
      

  5.   


    1. 我最多只有10条连接,相当于连接池那种感觉
    2. 我只有在最开始的时候才login,后面都是在执行query
      

  6.   

    我看您发了很多关于mysql的博文还回复了很多mysql的帖子,想必您对mysql理解比较透彻,这个问题困扰我很久了。
        之前在网上搜过,说有可能是mysql和glibc之间的一个bug,说mysql在登录时,glibc的某些函数和mysql搭配起来使用就会出现这种情况。但是我这个程序里面是登录之后再去执行query才挂的,请问一下您知不知道glibc和mysql在执行正常的query的时候会不会有这种bug.
         我之前使用的centos5.6 glibc是2.5的,mysql挂的非常频繁,后来换到环境CentOS6.2 glibc2.12就只发生过一个(程序跑了一个星期后msyql才挂了)。