Cuando administras un servidor con cPanel/WHM que aloja decenas o cientos de bases de datos MySQL, eventualmente te encontrarás con situaciones donde necesitas verificar la integridad de las tablas o mejorar el rendimiento de las consultas. Esto es especialmente común después de eventos como migraciones, restauraciones de backup, upgrades o downgrades de versión de MySQL.
La herramienta mysqlcheck te permite realizar estas tareas sobre todas las bases de datos del servidor de una sola vez, sin necesidad de entrar a cada cuenta cPanel por separado. En este artículo aprenderás a usarla correctamente y, sobre todo, a saber cuándo no usarla.
El comando --check realiza una verificación de solo lectura sobre cada tabla, comprobando que no haya corrupción estructural. No modifica ningún dato, por lo que es completamente seguro de ejecutar en producción.
La salida mostrará cada tabla seguida de OK si todo está en orden. Si alguna tabla presenta problemas, verás mensajes como Table is marked as crashed o errores específicos que requerirán intervención.
1034, 1146, mensajes de tablas dañadas).El comando --analyze regenera las estadísticas que utiliza el optimizador de consultas de MySQL para decidir qué índices usar y en qué orden. Cuando estas estadísticas están desactualizadas, el optimizador puede elegir planes de ejecución subóptimos, causando lentitud notable en aplicaciones como WordPress, WooCommerce, Moodle, etc.
Puedes usar el parámetro --skip-write-binlog evita que estas operaciones se escriban en el binlog (útil si tienes replicación o simplemente para no inflarlo innecesariamente).
A diferencia del --check, el --analyze es muy rápido incluso en servidores con cientos de bases de datos, ya que solo toma una muestra de páginas por tabla para estimar la cardinalidad de los índices.
Aquí es donde la mayoría de tutoriales en internet dan malos consejos. Existe la creencia popular de que correr mysqlcheck --all-databases --optimize periódicamente es "buena práctica", pero en la realidad, rara vez es necesario y puede ser contraproducente.
OPTIMIZE TABLE se traduce internamente en una reconstrucción completa de la tabla. Esto requiere espacio temporal en disco equivalente al tamaño de la tabla.OPTIMIZE solo es útil cuando una tabla específica tiene fragmentación significativa, es decir, cuando ha tenido borrados masivos y el espacio liberado no se ha devuelto al sistema operativo. Casos típicos: tablas de logs como wp_wfHits, wp_loginizer_logs, wp_actionscheduler_logs que crecieron a varios GB y luego fueron purgadas.
Paso 1: Identificar tablas con fragmentación real
Ejecuta esta consulta para detectar candidatas legítimas a OPTIMIZE:
Solo las tablas que aparezcan en este listado (con más de 100MB de datos y más del 30% de espacio libre interno) son candidatas reales.
Paso 2: Optimizar selectivamente
En lugar de correr el OPTIMIZE sobre todas las bases de datos, hazlo únicamente sobre las tablas detectadas. La forma más segura y recomendada para usuarios finales es hacerlo desde phpMyAdmin dentro de cPanel:
Este método es preferible porque:
1. Todas las bases de datos del servidor:
2. Una base de datos específica (todas sus tablas):
3. Una tabla específica dentro de una base:
4. Múltiples tablas específicas dentro de la misma base:
5. Múltiples bases de datos (con el flag --databases):
Nota el detalle del último caso: cuando quieres operar sobre varias bases, necesitas el flag --databases para que mysqlcheck entienda que todos los argumentos son nombres de bases y no base tabla1 tabla2. Sin ese flag, interpretaría el primer argumento como base y los demás como tablas.