Too many connections MySql

He tenido problemas técnicos estos días. Sí, cada cierto tiempo, recibo la visita de ese espíritu burlón y que gusta de joder con problemas en el servidor. Por lo visto, durante unos días, el blog empezó a ir mal, dando errores, tardando en cargar una eternidad y con algunos mensajes que no puedo decir exactamente lo que describían, pero parecía ser algo así como:

Error 1040: Too many connections

Y debía estar relacionado con la base de datos en MySQL. ¿Y qué hago yo? Que no tengo ni idea de gestionar mi propio servidor dedicado. Pues nada, a empollarse foros donde nadie aclara nada y buscar inexistentes tutoriales para principiantes. Escribí a mi maravillosa empresa de hosting OVH y me dijeron que no me podían ayudar porque ellos no pueden gestionar el servidor dedicado de cada cliente.

logo-mysql-base-datos

Empezando a investigar, parece ser que di con que el problema residía en las conexiones que se hacían a la base de datos y que no finalizaban, quedándose estancadas y ocupando el lugar para futuros accesos. Así, si la base de datos tiene un cupo de 100 peticiones y este se supera, se queda colgada. Y lo gracioso es que aunque las conexiones se quedan estancadas, no están realizando en realidad actividad, sino que simplemente se han quedado estancadas y ocupando el lugar.

Al parecer, había que configurar unas variables en un fichero que controla la base de datos y que permitían ampliar el número de conexiones, que en mi caso creo que eran 100 sólo, así como también se podían añadir variables para el tiempo en segundos que queramos que las conexiones permanezcan ocupando un lugar antes de que las finalizen.

Pero para hacer esto había que manejar SSH, que yo no tengo ni zorra idea y había ponerse las pilas, porque era vital y la única solución, ya que los plugins de caché no conseguían mantener el blog a flote. Bueno, aquí tengo que hacer un inciso, y es que donde el plugin WP-Super Caché falló, un nuevo plugin de caché que no conocía, llamado W3 Total Cache, me sirvió durante unos días para mantenerme a medias bien. lo digo porque me parece que es una buena opción como sustituto al omnipotente WP-Super Caché.

Empecé a buscar cómo manejar un programa intérprete de órdenes seguras, y hallé el famoso Putty, así que pensé que ya era hora de manejarlo en serio de una vez por todas. Pero nunca había conseguido hacer login en mi servidor dedicado por un fallo, y es que no había conservado el usuario y contraseña que me habían explicado en el correo de bienvenida que me dieron. Pensaba que para usar SSH, tenía que usar mis claves de FTP o de mi cuenta en el servidor OVH, pero no eran esas claro. Revisando el correo antiguo, logré recuperar las claves.

putty my.cnf

Una vez que me identifiqué en Putty por SSH, tuve que buscar el archivo de configuración de MySql, que es my.cnf

Así que hay que escribir esto en la consola del Putty para acceder al archivo:

nano /etc/my.cnf
Si no te funciona, prueba con nano /etc/mysql/my.cnf

Una vez que se abre el archivo, hay que buscar esta linea [mysqld] y buscar si aparecen estas lineas:

max_connections=500
wait_timeout=20
connect_timeout=10

En mi caso, no estaban, pero puede ser que vosotros las tengáis con otros números. Si no las tenéis, podéis copiarlas tal y como las tengo yo ahora, que así me funciona bien el blog. Si ya las tenéis con otros valores, tendréis que alterarlos (si tenéis ese error en las conexiones).

max_connections es el número de conexiones permitidas a la base de datos. Lo que hice yo fue aumentarla de 100 a 500. Dicen que tampoco hay que pasarse, así que hay que subirlo, pero con moderación.

wait_timeout y connect_timeout controlan el tiempo que una conexión está accediendo a la base de datos antes de largarla. Así que si tenéis un valor muy alto, probad a bajarlo, como en el ejemplo que os he puesto, a 20 ó 10 estará bien.

Tras esto, hay que guardar el fichero con CTRL+O y salir con CTRL+X

Leí que luego había que escribir /etc/rc.d/init.d/mysqld restart para reiniciar MySql, pero a mi no me funcionó. Lo que hice fue ir al servidor de OVH y reiniciarlo a lo bruto (es lo que tiene el no saber).

También vi otro método de hacerlo por phpMyAdmin, donde tenemos que hacer una consulta en el apartado que pone SQL. Escribimos esto (alterando el número a nuestro gusto):

SET GLOBAL max_connections = 500;

Pero esto a mi no me sirvió, porque decía que requería permisos superiores para hacer dicha consulta. Por eso tuve que usar Putty para conectarme por SSH.

Ahora parece que ya me funciona bien el servidor y no he vuelto a ver el cartelito de que hay muchas conexiones a la base de datos, así que imagino que con esto arreglé el problema. Eso sí, he aprendido que para manejar el servidor, hay que empaparse de conocimientos de SSH para gestionar ciertos temas.

Compartir este artículo

6 comentarios en «Too many connections MySql»

  1. Bueno, pues me alegro que hayas logrado solucionar el problema, eso de los servidores dedicados me imagino que es otro mundo a parte, que yo desconozco totalmente, lo dicho me alegro que hayas tenido éxito solucionándolo.

    Por cierto veo que ahora el problema es la plantilla, no? supongo que o volverás a la anterior (que no sé porque me da que igual no ya que por lo que he visto hace un rato no parecía muy estable y hace cosas raras) o pondrás una nueva, la verdad es que para mí sería una sorpresa que nos sorprendieras con una nueva :-)

    Salu2!

  2. Qué horror, el lío que has tenido y lo difícil que se ve todo esto. Anoche cuando entré y vi la entrada de hola mundo, ya me imaginé que ocurría algo.
    Me alegro mucho que ya lo hayas solucionado Andrés.

  3. hola..! amigo como hicistes para acceder con putty a tu hosr me baje el putty :s y no se qe campos tengo que llenar antes de darle open me podrias ayudar.! me pasa lo mismo que a ti! :S y otra pregunta como reinicias mysql a lo bruto? que yo ni eso se hacer.. =( :S

  4. Necesitas poner en el Putty la IP de tu hosting y el puerto 22. Luego te pedirá la contraseña. Estos datos debes saberlos preguntando a tu hosting. Imagino que en el email de bienvenida que te dieron, figuran esos datos.

    Para reiniciar mysql a los bruto, lo que hice fue reiniciar el servidor desde el panel de control de la empresa donde tengo el hosting. Imagino que debes tener esa opción en el panel de control donde gestionas tu servidor.

  5. Yo solucione directamente desde el MySQl

    SET GLOBAL max_connections=600;
    set global wait_timeout=10;
    set global connect_timeout=10;

Deja un comentario