Muchos procesos NULL en MySQL

Muchos procesos NULL en MySQL

Desde la semana pasada, sin ningún motivo en particular, mi sitio web comenzó a ralentizarse drásticamente. Inicié sesión en MySQL y ejecuté show Processlist, lo que resultó en algo como esto:

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)

Cuando reinicio MySQL no tengo ningún proceso como es de esperar. Cuando actualizo mi sitio web y reviso rápidamente los procesos, puedo ver algunas consultas que desaparecen después de un momento. Todo es perfecto, pero luego de un tiempo, de la nada, nuevamente obtengo muchos procesos como los que se muestran arriba. Por supuesto, esto congela mi sitio web.

Parecen desaparecer después de un tiempo, pero antes del valor de, wait_timeouty luego aparecen nuevamente después de un tiempo con diferentes ID.

¿Alguien tiene idea de qué podría estar causando esto?

Especificaciones de mi servidor:
CentOS 5
Versión de MySQL: 5.1.33-log Distribución de origen
RAM 8 GB

parte de mi.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

Espero que eso ayude a alguno de ustedes a orientarme en la dirección correcta. Se me acabaron las ideas.

EDITAR Todo parece ser relevante para esos errores de MySQL:
http://bugs.mysql.com/bug.php?id=8945
http://bugs.mysql.com/bug.php?id=6070
Lamentablemente no se resuelven :(

Respuesta1

Verifique los valores de su servidor mysql. ¿Estás utilizando usuarios predeterminados en MySQL? También echaría un vistazo a dos cosas:

  1. Asegúrese de que solo servidores específicos puedan conectarse a la base de datos mysql. Si tiene un usuario que se conecta desde %, asegúrese de tener una buena contraseña (y una buena razón).

  2. Asegúrese de que nadie envíe consultas a su aplicación fuera de los requisitos de código que tiene para ejecutar la aplicación. Es posible que alguien esté inyectando datos en su base de datos sin siquiera visitar su sitio.

Realice un seguimiento de sus conexiones activas durante un tiempo prestando mucha atención a netstat. El tiempo de espera es una indicación de que alguien/algo ha consultado su servidor. Mantener un seguimiento cercano le ayudará a descubrir quiénes son. Una vez hecho esto, si necesita bloquearlos rápidamente sin realizar cambios drásticos, use iptables.

Una última cosa... habilite brevemente el registro de MySQL. Tu servidor se verá afectadoperoVerás exactamente lo que está pasando con MySQL.

edite el archivo my.cnf y agregue (o actualice) esto:

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

EDITAR: Hice las sugerencias anteriores porque el valor NULL en el campo de información indica que no se están ejecutando declaraciones.

información relacionada