在MySQL中有很多NULL进程

自从上周没有特别的原因,我的网站开始急剧放缓。 我login到MySQL并运行show processlist导致这样的事情:

mysql> show full processlist; +------+------+-----------+---------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+------+-----------+---------+---------+------+-------+------------------+ | 2047 | web | localhost | myDB | Sleep | 81 | | NULL | | 2049 | web | localhost | myDB | Sleep | 81 | | NULL | | 2050 | web | localhost | myDB | Sleep | 81 | | NULL | | 2052 | web | localhost | myDB | Sleep | 81 | | NULL | | 2053 | web | localhost | myDB | Sleep | 81 | | NULL | | 2054 | web | localhost | myDB | Sleep | 81 | | NULL | | 2055 | web | localhost | myDB | Sleep | 81 | | NULL | ... | 2066 | web | localhost | myDB | Sleep | 80 | | NULL | | 2067 | web | localhost | myDB | Sleep | 80 | | NULL | | 2178 | web | localhost | myDB | Sleep | 76 | | NULL | +------+------+-----------+---------+---------+------+-------+------------------+ 131 rows in set (0.00 sec) 

当我重新启动MySQL时,我没有任何预期的进程。 当我刷新我的网站,并迅速检查过程中,我可以看到一些查询一会儿后消失。 一切都很完美,但过了一段时间之后,我又得到了很多如上所示的过程。 这当然会冻结我的网站。

它们似乎在一段时间后消失,但在wait_timeout的值之前消失,然后在一段时间后再次出现不同的Id。

有没有人有什么可能导致这个线索?

我的服务器的规格:
CentOS 5
MySQL版本:5.1.33-日志源分配
RAM 8GB

属于my.cnf的一部分

 [mysqld] default-character-set = utf8 character_set_server = utf8 default-collation = utf8_unicode_ci collation_server = utf8_unicode_ci ft_min_word_len = 3 port = 5689 socket = /tmp/mysql.sock skip-locking skip-name-resolve key_buffer_size = 256M group_concat_max_len = 2048 max_allowed_packet = 10M table_cache = 512 table_definition_cache = 512 sort_buffer_size = 10M net_buffer_length = 8K read_buffer_size = 40M read_rnd_buffer_size = 10M myisam_sort_buffer_size = 8M long_query_time = 1 net_read_timeout = 30 net_write_timeout = 60 log_slow_queries = /var/log/slowqueries query_cache_type = 1 query_cache_limit = 5MB query_cache_size = 134217728 max_heap_table_size = 24MB tmp_table_size = 24MB expire_logs_days = 99 max_connections = 500 init-connect = 'SET NAMES latin1' thread_cache_size = 4 wait_timeout = 600 

我希望这能帮助你们中的一个把我指向正确的方向。 我没有想法。

编辑整个事情似乎是相关的那些MySQL的错误:
http://bugs.mysql.com/bug.php?id=8945
http://bugs.mysql.com/bug.php?id=6070
不幸的是,他们没有解决:(

检查你的mysql服务器的值。 你使用默认的用户在MySQL? 我也看看两件事情:

  1. 确保只有特定的服务器可以连接到mysql数据库。 如果你有一个用户正在连接%,请确保你有一个好的密码(和很好的理由)。

  2. 确保有人没有在您已经准备好运行应用程序的代码要求之外向您的应用程序发送查询。 有人可能会将数据注入到您的数据库甚至没有访问您的网站。

密切关注netstat,跟踪你一段时间的活动连接。 wait_timeout表示某人/某事物查询了您的服务器。 保持密切的轨道将帮助你发现他们是谁。 一旦你这样做,如果你需要快速阻止他​​们而不作重大改变,使用iptables。

最后一件事…简单地启用mysql日志logging。 你的服务器会受到打击, 你会看到到底是怎么回事与MySQL。

编辑my.cnf文件并添加(或更新):

 log = /var/log/mysql/mysql.log 

编辑:我提出了前面的build议,因为信息字段中的NULL值表示没有语句正在执行。