🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo optimizar el rendimiento de MySQL en DirectAdmin (my.cnf)

Actualizado el 17 de junio de 2026

¿Por qué es importante optimizar MySQL en DirectAdmin?

Si tienes una web con tráfico medio o alto, probablemente hayas notado que a veces tarda en cargar. Uno de los culpables más comunes es una base de datos MySQL o MariaDB mal configurada. Por defecto, los valores de configuración de MySQL en DirectAdmin son muy conservadores, pensados para servidores con poca RAM y pocas conexiones. Eso significa que tu servidor puede tener recursos de sobra, pero MySQL no los está aprovechando.

Optimizar MySQL DirectAdmin no es un lujo, es una necesidad si quieres que tus páginas carguen rápido y tu servidor no se ahogue en momentos de pico. La buena noticia es que no necesitas ser un ingeniero de sistemas para hacer ajustes básicos. Con un poco de paciencia y siguiendo esta guía, podrás modificar el archivo my.cnf de DirectAdmin de forma segura y efectiva.

Al final de este artículo, sabrás exactamente qué parámetros tocar, cómo medir si están funcionando y qué errores evitar. Vamos a ello.

Antes de empezar: preparativos y copias de seguridad

Localiza tu archivo my.cnf en DirectAdmin

El archivo de configuración principal de MySQL/MariaDB en sistemas con DirectAdmin suele estar en /etc/my.cnf o /etc/mysql/my.cnf. A veces, DirectAdmin lo divide en varios archivos dentro de la carpeta /etc/my.cnf.d/. Para saber cuál es el tuyo, abre una terminal como root y ejecuta:

mysql --help | grep "Default options" -A 1

Ese comando te dirá qué archivos lee MySQL al arrancar. Normalmente verás una lista con rutas como /etc/my.cnf, ~/.my.cnf y similares. El primero que exista en esa lista es el que debes editar.

Haz una copia de seguridad antes de tocar nada

Este paso es obligatorio. Un error en la configuración puede impedir que MySQL arranque, y eso tumbaría todas tus webs. Para evitarlo, copia el archivo original:

cp /etc/my.cnf /etc/my.cnf.bak

Guarda ese backup en un lugar seguro. Si algo sale mal, podrás restaurarlo con:

cp /etc/my.cnf.bak /etc/my.cnf

[WARNING] No edites nunca el archivo my.cnf mientras MySQL esté en ejecución sin saber lo que haces. Los cambios no se aplican hasta que reinicies el servicio, así que edita con calma y reinicia solo cuando estés seguro.

Entiende la estructura básica del archivo

El archivo my.cnf se divide en secciones entre corchetes. Las más importantes para optimizar MySQL DirectAdmin son:

  • [mysqld]: aquí van los ajustes del servidor principal.
  • [mysql] y [client]: ajustes para la línea de comandos.
  • [mysqldump]: configuración para las copias de seguridad.

Nos centraremos casi todo el tiempo en la sección [mysqld], que es donde se definen los parámetros de rendimiento.

Los 5 ajustes clave para optimizar MySQL DirectAdmin

1. Buffer Pool (InnoDB Buffer Pool Size)

Este es, sin duda, el ajuste más importante. El innodb_buffer_pool_size define cuánta memoria RAM usa MySQL para almacenar en caché los datos y los índices de las tablas InnoDB. Cuanto más grande sea este valor, menos accesos a disco necesitará MySQL, y por tanto, más rápido responderá.

Regla práctica: en un servidor dedicado solo a bases de datos, puedes asignar hasta el 70-80% de la RAM total. En un servidor compartido con Apache, PHP y otros servicios, quédate en un 40-50%.

Para ver cuánta RAM tienes, usa:

free -m

Si tienes 8 GB de RAM (unos 8000 MB), y el servidor solo aloja MySQL, podrías poner:

[mysqld]
innodb_buffer_pool_size = 5G

Pero si además tienes Apache/PHP, empieza con 2G y ve subiendo poco a poco.

[TIP] Si tu servidor tiene menos de 2 GB de RAM, deja el valor por defecto (128 MB) y no lo toques. Un valor demasiado alto provocará swapping y ralentizará todo el sistema.

2. Tamaño y límite de conexiones (max_connections)

El parámetro max_connections limita cuántas conexiones simultáneas puede tener MySQL. Si tu web usa muchos plugins o tiene mucho tráfico, es fácil agotar el límite por defecto (que suele ser 151).

Para saber cuántas conexiones estás usando, ejecuta:

SHOW STATUS LIKE 'Threads_connected';

Si ves que se acerca al límite, sube el valor. Pero cuidado: cada conexión consume memoria. Un valor razonable para la mayoría de servidores es entre 100 y 300.

max_connections = 200

También te recomiendo ajustar max_connect_errors. Por defecto es 100, pero en servidores con muchos bots o ataques, se llena rápido y bloquea IPs legítimas. Ponlo a 1000 para mayor margen.

3. Cache de consultas (query_cache)

Este parámetro ha cambiado mucho en las versiones recientes de MySQL. En MySQL 5.7 y anteriores, el query_cache_size era útil para guardar en memoria los resultados de consultas repetidas. En MySQL 8.0 y MariaDB, este parámetro está obsoleto o desaconsejado.

Mi recomendación: si usas MySQL 5.7 o inferior, y tu web hace muchas consultas SELECT repetitivas, activa la caché con:

query_cache_type = 1
query_cache_size = 64M

Si usas MySQL 8.0 o MariaDB 10.5+, no toques estos parámetros o incluso desactívalos poniendo query_cache_type = 0. En esas versiones, la caché de consultas puede causar más problemas que beneficios, especialmente por el bloqueo global que genera.

[WARNING] En MySQL 8.0, la query cache fue eliminada por completo. Si tu versión no la soporta, añadir esas líneas no hará nada, pero tampoco romperá nada, solo ignorará el parámetro.

4. Tamaño de las tablas temporales (tmp_table_size y max_heap_table_size)

Cuando MySQL necesita ordenar datos o crear tablas temporales, las guarda en memoria hasta un límite. Si ese límite se supera, las escribe en disco, lo cual es mucho más lento.

Los parámetros tmp_table_size y max_heap_table_size controlan ese comportamiento. Ambos deben tener el mismo valor para que funcionen bien juntos.

Para la mayoría de sitios WordPress o tiendas online, un valor de 64 MB es más que suficiente:

tmp_table_size = 64M
max_heap_table_size = 64M

Si ves errores de "table is full" en los logs de MySQL, aumenta ambos valores.

5. Tamaño de los logs de transacciones (innodb_log_file_size)

Este ajuste es menos conocido, pero importante. El innodb_log_file_size define el tamaño de los archivos de registro (redo logs) que MySQL usa para recuperarse de fallos y para escrituras rápidas.

Un valor pequeño hace que MySQL escriba en disco con más frecuencia, reduciendo el rendimiento. Un valor grande mejora la velocidad de escritura, pero alarga el tiempo de recuperación si el servidor se cae.

Para servidores con más de 4 GB de RAM, te recomiendo aumentar este valor a 256 MB o 512 MB:

innodb_log_file_size = 256M

[INFO] Si cambias este valor, tendrás que reiniciar MySQL de forma limpia. A veces es necesario mover los archivos de log antiguos antes de arrancar. No te asustes si ves un error al reiniciar, simplemente borra los archivos ib_logfile0 y ib_logfile1 de la carpeta de datos (normalmente /var/lib/mysql/) y reinicia de nuevo.

Cómo medir si tus ajustes están funcionando

Después de aplicar los cambios y reiniciar MySQL, no te quedes solo con la intuición. Hay herramientas y comandos que te dicen si realmente estás optimizando MySQL DirectAdmin o si estás yendo a ciegas.

Usa MySQLTuner (la herramienta imprescindible)

MySQLTuner es un script en Perl que analiza tu servidor MySQL y te da recomendaciones personalizadas. Es gratuito y muy fácil de usar:

cd /tmp
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl

El script te preguntará por el usuario y contraseña de root de MySQL. Tras el análisis, verás secciones como "Recommendations" y "Performance Metrics". Ahí te dirá si tu innodb_buffer_pool_size es adecuado, si hay demasiadas conexiones rechazadas, etc.

Comandos básicos de monitorización

Desde la línea de comandos de MySQL, puedes ver métricas en tiempo real:

SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';

La relación entre read_requests (lecturas desde memoria) y reads (lecturas desde disco) te indica si tu buffer pool está bien dimensionado. Si reads es muy alto comparado con read_requests, necesitas más memoria en el buffer.

El comando top para ver consumo de RAM

Ejecuta top y presiona la tecla M para ordenar por uso de memoria. Verás el proceso mysqld y cuánta RAM consume. Si se acerca al límite físico de tu servidor, reduce los valores que configuraste.

Errores comunes al optimizar MySQL en DirectAdmin

1. Poner valores demasiado altos

Es tentador poner innodb_buffer_pool_size = 8G si tu servidor tiene 8 GB de RAM. Pero recuerda que Apache, PHP y el propio sistema operativo también necesitan memoria. Si MySQL consume toda la RAM, el sistema empezará a hacer swapping, y el rendimiento caerá en picado.

2. No reiniciar el servicio después de los cambios

Los cambios en my.cnf no se aplican en caliente. Necesitas reiniciar MySQL:

systemctl restart mysql

O, en sistemas con MariaDB:

systemctl restart mariadb

3. Mezclar parámetros de versiones antiguas

Algunos parámetros como key_buffer son para la antigua tabla MyISAM. Si usas InnoDB (lo más común), no pierdas tiempo con ellos. Céntrate en los parámetros innodb_*.

4. No monitorear después del cambio

Un ajuste que funciona hoy puede no funcionar mañana si el tráfico aumenta. Revisa los logs de MySQL (/var/log/mysql/error.log) y los gráficos de tu panel de control al menos una vez por semana después de hacer cambios.

Ejemplo de configuración optimizada para un servidor con 4 GB de RAM

Aquí tienes un ejemplo completo de sección [mysqld] para un servidor típico de DirectAdmin con 4 GB de RAM, Apache y PHP:

[mysqld]
# Buffer pool de InnoDB (50% de la RAM)
innodb_buffer_pool_size = 2G

# Logs de transacciones
innodb_log_file_size = 128M
innodb_flush_method = O_DIRECT

# Conexiones
max_connections = 150
max_connect_errors = 1000

# Tablas temporales
tmp_table_size = 64M
max_heap_table_size = 64M

# Cache de consultas (solo para MySQL 5.7 o inferior)
query_cache_type = 0
query_cache_size = 0

# Configuración básica adicional
performance_schema = ON
innodb_flush_log_at_trx_commit = 2

[TIP] El parámetro innodb_flush_log_at_trx_commit = 2 mejora el rendimiento en escrituras, pero aumenta el riesgo de perder datos en un fallo de energía. Si tu web maneja datos críticos (como pagos), déjalo en 1 (el valor por defecto).

Preguntas frecuentes (FAQ)

¿Cada cuánto debo revisar la configuración de MySQL?

Revisa al menos una vez al mes, o después de cambios importantes como migraciones, aumento de tráfico o instalación de plugins pesados. La configuración óptima hoy no lo será dentro de seis meses.

¿Puedo optimizar MySQL DirectAdmin desde el panel de control?

DirectAdmin tiene un plugin llamado "MySQL Manager", pero no permite editar my.cnf gráficamente. Deberás hacerlo por SSH. Si usas Syspanel (antes HestiaCP), recuerda que el acceso por SSH es el mismo, pero el puerto de administración web es el 2106.

¿Qué hago si MySQL no arranca después de un cambio?

Primero, restaura el backup que hiciste al principio:

cp /etc/my.cnf.bak /etc/my.cnf
systemctl restart mysql

Si aun así no arranca, revisa el log de errores:

tail -50 /var/log/mysql/error.log

¿Los ajustes de my.cnf afectan a todas las bases de datos del servidor?

Sí, los cambios en [mysqld] son globales. Si tienes múltiples sitios con necesidades muy diferentes, considera usar contenedores o instancias separadas, pero eso ya es un nivel avanzado.

Conclusión: optimizar MySQL DirectAdmin es un proceso continuo

Optimizar MySQL en DirectAdmin no es un "configura y olvídate". Es un proceso iterativo: aplicas cambios, mides, ajustas y vuelves a medir. Con los parámetros que te he mostrado, tendrás una base sólida para empezar.

Recuerda siempre hacer copias de seguridad antes de tocar nada, usar MySQLTuner para validar tus decisiones y no caer en la tentación de poner valores extremos. Con un poco de paciencia, notarás una mejora significativa en la velocidad de tus consultas y en la respuesta general de tu servidor.

Si te ha quedado alguna duda, repasa los pasos de nuevo o consulta la documentación oficial de MySQL/MariaDB. Y no olvides que, si usas Syspanel como panel alternativo, la configuración de MySQL es idéntica, solo cambia el puerto de acceso a la administración web (2106).

¡Manos a la obra y feliz optimización!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel