Cómo reducir el uso de memoria de MySQL

GuíasBases de datosLinuxMySQLSistemas

En ocasiones, puede que MySQL deje de funcionar y se muestre un error diciendo que se ha quedado sin memoria. También se podría dar el caso de que MySQL no se inicie. Si tu sistema tiene pocos recursos y ejecutas aplicaciones intensivas, puede que éstos se agoten antes de que se excedan ciertas restricciones de uso que MySQL incorpora por defecto.

Cómo optimizar el archivo my.cnf

Un modo de resolver este problema es reducir la cantidad de memoria que utiliza el servidor de MySQL. Es por ello que vamos a realizar algunas optimizaciones. Para ello, debes acceder a tu servidor como root para editar el archivo my.cnf. Puedes seguir estos pasos:

  1. Usa un editor como vim o nano para editar el archivo de configuración de MySQL, localizado habitualmente en /etc/my.cnf:
    nano /etc/my.cnf
  2. Realizar los siguientes cambios en el archivo. La  Puede que tengas que agregar algunas opciones o eliminar el comentario (#) de algunas de ellas:
    set-variable = max_allowed_packet=4M
    set-variable = thread_stack=64K
    set-variable = table_cache=4
    set-variable = sort_buffer=64K
    set-variable = net_buffer_length=4K
    set-variable = key_buffer_size=2097152

    Estos valores son una reducción proporcional de los valores por defecto que deberían funcionar en la mayoría de los sistemas. Esto no quiere decir que sean los valores que más se ajusten a las características de tu sistema.

  3. Guarda el archivo pulsando CTRL + X y, seguidamente,confirmando los cambios con y.

Reinicia el servidor MySQL. Para hacerlo, usa uno de estos comandos:

  • Si usas Debian o Ubuntu:
    service mysql restart
  • Si usas Fedora o CentOS:
    service mysqld restart

Cuando hayáis reiniciado MySQL se habrán aplicados los cambios que has realizado en el archivo de configuración.

Cómo optimizar aún más el archivo my.cnf

En caso de que el problema persista, tendrás que tomar medidas más drásticas, como deshabilitar el motor InnoDB y limitarte a clásicas tablas MyISAM. Por desgracias, con MyISAM tendrás que prescindir del uso de transacciones MySQL. Vamos a realizar ésta y alguna otra optimización más:

  1. Edita el archivo de configuración de MySQL de nuevo con nano, vim, o cualquier otro editor. Se encuentra en /etc/my.cnf:
    nano /etc/my.cnf
  2. Realizar los siguientes cambios en el archivo. La  Puede que tengas que agregar algunas opciones o eliminar el comentario (#) de algunas de ellas:
    skip-innodb
    skip-networking
    skip-bdb
    skip-ndbcluster
  3. Guarda el archivo pulsando CTRL + X y, seguidamente,confirmando los cambios con y.

El uso de memoria se debería haber reducido ahora drásticamente. Recuerda que desde ahora solamente deberás usar tablas MyISAM, por lo que tendrás que convertir las existentes para que usen este motor, y probablemente modificar el código de algunas aplicaciones; todo depende de su grado de compatibilidad. En caso de que quieras mantener el motor InnoDB, mantén los otros cambios y excluye la línea skip-innodb de la configuración.