本帖最后由 kapil 于 2009-06-24 08:46:39 编辑

解决方案 »

  1.   

    Can't connect to local MySQL server through socket '/tmp/mysql.sock(11)你的MYSQL进程没启动。看一下你的MySQL的错误日志,检查一下为什么MySQL停止了。
      

  2.   

    我的服务器经常会出现 
    Can't connect to local MySQL server through socket '/tmp/mysql.sock(11)能否连接上MYSQL?本机能否连接?看看ERR日志
      

  3.   


    我查看mysql的进程已经存在了我也看了error.log(在my.cnf配置的错误日志文件),也没发现什么错误现象,服务器my.cnf的配置如下:
         18 [client]
         19 #password   = your_password
         20 port        = 3306
         21 socket      = /tmp/mysql.sock
         22
         23 # Here follows entries for some specific programs
         24
         25 # The MySQL server
         26 [mysqld]
         27 port        = 3306
         28 socket      = /tmp/mysql.sock
         29 skip-locking
         30 key_buffer = 16M
         31 max_allowed_packet = 1M
         32 table_cache = 64
         33 sort_buffer_size = 512K
         34 net_buffer_length = 8K
         35 read_buffer_size = 256K
         36 read_rnd_buffer_size = 512K
         37 myisam_sort_buffer_size = 8M
         38
         39 max_connections = 500
         40
         41 datadir = /opt/data/mysql
         42
         43 log-error = /opt/data/mysql/error.log日志文件:
        121 090624 08:23:50  mysqld started
        122 InnoDB: No valid checkpoint found.
        123 InnoDB: If this error appears when you are creating an InnoDB database,
        124 InnoDB: the problem may be that during an earlier attempt you managed
        125 InnoDB: to create the InnoDB data files, but log file creation failed.
        126 InnoDB: If that is the case, please refer to
        127 InnoDB: http://dev.mysql.com/doc/refman/5.0/en/error-creating-innodb.html
        128 090624  8:23:50 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
        129 Version: '5.0.40'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution都是些类似这样的记录,感觉没什么意义呀
      

  4.   


    虽然能看到有mysql进程,但是在本地连接不上, 输入密码之后就没有任何反应了
      

  5.   

    增加
    [mysql] 
      socket=/tmp/mysql.sock
    试试
      

  6.   


    呵呵,能告诉为什么要加这个吗?按照你说的加到my.cnf中之后,mysql重启之后不能连接,删除这个之后mysql才可以连接~~~
      

  7.   


    在出现提示“Can't connect to local MySQL server through socket '/tmp/mysql.sock(11) ”的时候,mysql是启动着的,但是本地连接不上,重启之后能连接我在[mysql]下添加socket = /tmp/mysql.sock并重启mysql之后,本地反而连不上
      

  8.   


    我也看了,日志文件不大,记录的都是我kill掉mysql进程的记录,没有任何关于Can't connect to local MySQL server through socket '/tmp/mysql.sock(11) 的记录昨天下午发生一次这样的情况,然后今天凌晨又发生一次,我在日志中看不到任何有关的情况,真是奇怪~~按照大家的经验,这样的情况一般都是什么引起的?负载?
    程序?
    还是配置或是编译?
      

  9.   

    一,能是你的DNS解析问题,如果日志中没有任何记录,说明问题很可能在CLIENT本身,即mysql命令时根本没找到正确的主机。二,如果是负载或并发连接数超上限,则应该会在错误日志中出现。但你说,重启一下mysqld就好了,这样似乎也不象是第一种情况。为什么我的mysql可以用/etc/init.d/mysqld start启动,但是不能用/etc/init.d/mysqld stop停止?一执行停止的命令就无反应,出现好多...,每次重新启动mysql都必须先kill -9 掉所有mysql进程,痛苦ing....启动一般是 linux start mysql
      

  10.   


    感谢你的回复!不过还是没解决我的问题,能把第一种情况详细说说吗?啊出现/tmp/mysql.sock错误时,我在服务器上用命令行登录也不行,输入密码之后就没反应了~~我之前 mysql启动都是直接在bin/mysqld_safe &
    这样启动的,请问这几种启动方式的差别~~谢谢
      

  11.   

    没什么好办法。毕竟这需要进行调试检查才能找到真正的原因。除非能在别人的机器上也进行模拟。建议出错的时候试一下这几个命令,根据结果再进行判断。mysqladmin version
    mysqladmin variables
    mysqladmin -h localhost version variables
    mysqladmin -h localhost --port=3306 version
    mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock顺便说一下,你的
     18 [client]
     19 #password = your_password
     20 port = 3306
     21 socket = /tmp/mysql.sock已经有socket 了,所有不能再添加了,也不用再添加了。
    这样启动的,请问这几种启动方式的差别~~这几种启动从mySQL本身来说都一样,启动 mysqld进和,但对操作系统来说,启动的时间,设置不一样。 bin/mysqld_safe & 只不过是在终端上提交一个进程后台执行。 很少在服务器上这样实现。放在rc服务中,当linux启动时会自动加载mysqld服务。
      

  12.   


    又出现问题了,这回是
    Lost connection to MySQL server at 'waiting for initial communication packet', system error: 95ps中可以查看mysql进程,但是不能连接,lsof | grep mysql.sock |wc -l返回55企图执行你提到的命令,但是输入回车之后没有任何反应,只能关掉SSH界面,重新登录。还有其他解决办法吗?
      

  13.   

    感觉上应该是你的MYSQLD进程在网络部分有什么问题,不响应连接请求
    1。是通讯本身有问题。下次直接试 mysqladmin -h localhost --port=3306 version,这个是走TCP的,而默认是走SOCKET的。2。MYSQLD进程问题。关键是找到如何再现问题的方法。
      

  14.   


    又出现问题了,执行mysqladmin -h localhost --port=3306 version之后,显示如下:
    /usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed
    error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)'
    Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!查看进程发现mysql依然运行,netstat -an之后发现有不少mysql.sock,是因为没释放的缘故吗?
      

  15.   

    你的环境和应用是什么?PHP?这样建议你检查一下你同一架服务器上的应用程序是不是没释放连接。
    打开普通日志功能,看一下连接情况。
      

  16.   

    个人觉得应该是/etc/rc.d/init.d/mysql里面的socket位置是错误的,可能 使用了默认的socket建议检查一下mysqld_safe 和mysql里面的socket指向是否一致
      

  17.   

    Can't connect to local MySQL server through socket '/tmp/mysql.sockmysql.sock文件损坏或是位置不正确
      

  18.   


    服务器是php+apache+mysql所有的程序都人工释放connection,现在服务器上跑了一套discuzz论坛代码和一个非常小的代码(基本上没几个人访问)。打开了普通日志和慢查询日志,什么都看不到,慢查询日志设置的1秒,日志中没有任何慢记录,普通的日志也看不到任何蛛丝马迹,都是些sql语句。现在基本上天天都出现这样的情况,一旦出现情况在shell下也连不上MYSQL,即使是TCP的方式也没反应~~我现在开始怀疑是discuzz论坛的问题了~~,唉~~头大~~
      

  19.   

    禁用sock,强制本机客户端使用TCP连接,看能不能解决问题。楼主的启动脚本(/etc/init.d/mysqld)是不是后来安装上去的? 或者后来修改过?
    如果mysql server是操作系统自带的,应该不会出现这种现象。
      

  20.   


    感谢你的提示!记得在装系统的时候机房的人好像装过一次MYSQL,后来我自己编译了一个mysql我也换过tcp连接方式,也是没过一天mysql就崩溃了,按理说dicuzz论坛也没那么差劲吧,我写的那几个小程序完全没可能把mysql弄崩溃呀
      

  21.   

    问题解决了么?
    看来是两次重装mysql引起的,比如你的mysql启动脚本是否用的mysql源码中自带的?如果是用的你编译mysql之前的,就可能出一些莫名其妙问题。
      

  22.   

    我也遇到该问题,/tmp/mysql.sock文件无缘无故丢失,但查询mysqld运行状态,该服务状态正在运行中。非要重启mysqld服务才能回复/tmp/mysql.sock文件。