这是我一位朋友的论坛出现的错误,因为他论坛中有个聊天室,在线人数还算可以.当在线超过150~200的时候,会频繁出现
Discuz! info: Can not connect to MySQL serverTime: 2010-1-29 11:47am
Script: /index.phpError: Can't connect to local MySQL server through socketErrno.: 2002Similar error report has been dispatched to administrator before.
以上的错误,他用的是Discuz的论坛程序,不过我估计是由于聊天室查询次数过多引起的.一般来说,2002错误都是刚装mysql的时候,没有配置好sock的路径引起的,而这错误却是出现在网站浏览的高峰期,特别是聊天室的高峰期.初步认定是如此高的在线人数,没有优化Mysql引起的,还有一点,由于跨境网络较慢(忘记说明,服务器放置地在国外)引起的查询超时.服务器内存为2G.但Mysql的配置却过于吝啬了,以下贴出基本分配:
[mysqld]
port            = 3306
socket          = /usr/local/mysql/tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000
我认为应该修改key_buffer = 256M,max_allowed_packet = 2M,table_cache = 512,并修改wait_timeout=60为此,我还有所疑惑,是否真正能解决此问题,是否那个聊天室程序对于mysql的查询是否优化,我也不清楚.毕竟不是我的.所以,想听听各位的见解.希望花上朋友们几分钟的时间,看看此问题,发表一下您的见解.答者皆有得分.十分感谢.

解决方案 »

  1.   

    MYSQL的ERROR日志信息是什么?配置是差了一点 
      

  2.   

    wait_timeout还可以设大一点。
    另外,要经常看看error日志
      

  3.   

    ·         错误:2002 (CR_CONNECTION_ERROR) 消息:不能通过套接字'%s' (%d)连接到本地MySQL服务器。
      

  4.   


    个人感觉应该从他的mysql配置文件入手,对于在线人数过高的网站,占用的httpd线程和数据库查询次数也颇高.
      

  5.   

    以下我贴出他的mysql错误日志...#vi <hostname>.err100622  2:11:57 [Note] /usr/local/mysql/libexec/mysqld: Normal shutdown100622  2:11:57  InnoDB: Starting shutdown...
    100622  2:12:00  InnoDB: Shutdown completed; log sequence number 0 43665
    100622  2:12:00 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete100622 02:12:00  mysqld ended100622 02:13:10  mysqld started
    100622  2:13:11  InnoDB: Started; log sequence number 0 43665
    100622  2:13:11 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
    Version: '5.0.33-log'  socket: '/usr/local/mysql/tmp/mysql.sock'  port: 3306  Source distribution
    100622  2:19:07 [Note] /usr/local/mysql/libexec/mysqld: Normal shutdown100622  2:19:07  InnoDB: Starting shutdown...
    100622  2:19:09  InnoDB: Shutdown completed; log sequence number 0 43665
    100622  2:19:09 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete100622 02:19:09  mysqld ended100622 02:19:09  mysqld started
    100622  2:19:09  InnoDB: Started; log sequence number 0 43665
    100622  2:19:09 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
    Version: '5.0.33-log'  socket: '/usr/local/mysql/tmp/mysql.sock'  port: 3306  Source distribution
    100625  1:30:33 [Note] /usr/local/mysql/libexec/mysqld: Normal shutdown100625  1:30:33  InnoDB: Starting shutdown...
    nnoDB: Shutdown completed; log sequence number 0 43665
    100625  1:30:36 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete100625 01:30:36  mysqld ended100625 01:31:47  mysqld started
    100625  1:31:48  InnoDB: Started; log sequence number 0 43665
    100625  1:31:49 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
    Version: '5.0.33-log'  socket: '/usr/local/mysql/tmp/mysql.sock'  port: 3306  Source distribution
    100625  1:33:25 [Note] /usr/local/mysql/libexec/mysqld: Normal shutdown100625  1:33:25  InnoDB: Starting shutdown...
    100625  1:33:29  InnoDB: Shutdown completed; log sequence number 0 43665
    100625  1:33:29 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete100625 01:33:29  mysqld ended100625 01:33:29  mysqld started
    100625  1:33:29  InnoDB: Started; log sequence number 0 43665
    100625  1:33:30 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
    Version: '5.0.33-log'  socket: '/usr/local/mysql/tmp/mysql.sock'  port: 3306  Source distribution
      

  6.   

    为了识别以上日志的时间#date
    Tue Jun 29 07:51:26 CEST 2010
      

  7.   


    他的wait_timeout=120 个人感觉够长了...再长点有点...
      

  8.   

    有一个说法是因为php当中的连接来不及释放导致连接耗近,可以定期执行一个批处理杀死那些idle的连接。
      

  9.   

    对方的程序和数据库是否有用到innodb引擎都不知道,没有的话,关掉不知道会不会好点.因为服务器已经在运行了,不好给他做压力测试来优化.姑且,我是打算修改他的my.cnf配置文件后,顺便帮他启动apache的mod_deflate模块,发送给用户前,先压缩一下.虽然感觉压缩php页面跟他的mysql没什么关系,不过姑且死马当活马医.
      

  10.   

    可以试一试添加thread_cache_size参数,此参数一般用最大在线连接高峰减平时正常连接数如 200-150=50 另外的参数也应该整大一点thread_cache_size = 50