Optimización de tablas MyISAM corruptas desde phpMyAdmin

En hosting compartido, las tablas MyISAM pueden corromperse por cierres inesperados, límites de disco o procesos que interrumpen la escritura. Esta guía, escrita desde la práctica profesional en hosting y bases de datos, explica cómo detectar, reparar y optimizar tablas MyISAM usando phpMyAdmin con comandos SQL, ejemplos reales y recomendaciones para minimizar riesgos.

Por qué ocurre la corrupción en tablas MyISAM

MyISAM es un motor de almacenamiento simple y rápido pero menos resistente que InnoDB ante apagones o I/O abrupto. Las causas más comunes en un entorno de hosting compartido son:

  • Apagados del servidor o reinicios forzados.
  • Espacio en disco agotado durante operaciones de escritura.
  • Procesos que agotan los recursos y terminan las conexiones.
  • Problemas en el sistema de archivos o en el hardware del proveedor.

Síntomas y mensajes de error frecuentes

Detectar la corrupción a tiempo evita pérdida de datos y caída prolongada del servicio. Mensajes habituales:

  • Got error 145 Table ‘.
    ‘ is marked as crashed and should be repaired
  • MyISAM: Unable to read record at position…
  • Errores en consultas SELECT o timeouts repetidos en determinadas tablas
  • En WordPress, por ejemplo, errores en tablas como wp_posts o wp_options suelen manifestarse como páginas en blanco, fallos en el admin o consultas lentas.

    Antes de reparar: medidas de seguridad y respaldo

    En hosting compartido no siempre tendrás acceso a herramientas de consola, por lo que phpMyAdmin es la interfaz más habitual. Antes de intervenir:

    • Hacer un backup completo de la base de datos. En phpMyAdmin utiliza Exportar y selecciona SQL con estructura y datos.
    • Exportar solo la tabla afectada si la BD es muy grande.
    • Si es posible, poner el sitio en modo mantenimiento para evitar escrituras concurrentes.

    Cómo comprobar si una tabla MyISAM está corrupta desde phpMyAdmin

    Paso a paso en phpMyAdmin:

    • Acceder al panel y seleccionar la base de datos.
    • Marcar la(s) tabla(s) que quieres verificar.
    • En el desplegable «Con selección» elegir Check table o Comprobar tabla.
    • Revisar el resultado: mostrará OK o detalles del error.

    También puedes ejecutar SQL directo en la pestaña SQL:

    CHECK TABLE `nombre_tabla`;

    Reparar tablas MyISAM desde phpMyAdmin

    phpMyAdmin facilita ejecutar REPAIR TABLE, pero hay opciones importantes según la gravedad:

    • REPAIR TABLE nombre_tabla QUICK — realiza una reparación rápida cuando el daño es leve.
    • REPAIR TABLE nombre_tabla EXTENDED — hace una reconstrucción más completa; es más lenta y consume más recursos.
    • REPAIR TABLE nombre_tabla USE_FRM — en casos raros con .frm inconsistentes.

    Ejemplo práctico desde la pestaña SQL:

    REPAIR TABLE `wp_posts` QUICK;
    -- o
    REPAIR TABLE `wp_posts` EXTENDED;

    phpMyAdmin devolverá un resultado indicando si la reparación fue exitosa y cuántas filas afectadas. Si la tabla está muy dañada y la reparación falla, el siguiente apartado muestra alternativas.

    Qué hacer si REPAIR TABLE falla

    • Descargar los archivos físicos de la tabla (.MYI y .MYD) si el proveedor lo permite —en hosting compartido esto suele estar restringido.
    • Solicitar al soporte del proveedor que ejecute myisamchk en el servidor o que realice una restauración desde backup.
    • Considerar extraer datos parciales con SELECT si algunas filas aún son accesibles y crear una tabla nueva para reconstruir datos.

    Optimizar tras la reparación: cuándo usar OPTIMIZE TABLE

    Después de reparar, es recomendable optimizar para recuperar espacio y reorganizar índices. En phpMyAdmin:

    • Selecciona la tabla y elige Optimize table o
    • Ejecuta SQL:
      OPTIMIZE TABLE `wp_posts`;

    OPTIMIZE TABLE repara fragmentación y actualiza estadísticas; en MyISAM puede recrear los archivos físicos para compactar datos.

    Conversión recomendada: evaluar pasar a InnoDB

    Si tienes problemas recurrentes, valora convertir tablas MyISAM a InnoDB. InnoDB ofrece transacciones, recuperación automática y mayor resiliencia ante fallos. Conversión simple desde phpMyAdmin o SQL:

    ALTER TABLE `nombre_tabla` ENGINE=InnoDB;

    Antes de convertir:

    • Revisar compatibilidad de consultas y plugins (en WordPress, la mayoría funciona con InnoDB).
    • Confirmar límites de recursos del hosting: InnoDB consume más RAM y puede no estar recomendado en planes muy básicos.

    Documentación técnica en MySQL sobre motores de almacenamiento ayuda a decidir: MySQL Storage Engines.

    Buenas prácticas para prevenir futuras corrupciones

    En hosting compartido las medidas preventivas reducen la probabilidad de corrupción:

    • Habilitar backups automáticos y conservar varias copias fuera del servidor principal.
    • Monitorizar uso de disco y alertas de I/O.
    • Actualizar y parchear aplicaciones para evitar operaciones que consuman excesivos recursos.
    • Si se requiere alta disponibilidad o bases de datos críticas, considerar migrar a un plan con acceso a herramientas como myisamchk y soporte dedicado.

    Ejemplo real: reparación de una tabla wp_posts corrupta

    Escenario: tras un corte de energía, el sitio WordPress muestra errores y phpMyAdmin reporta que wp_posts está marcada como crashed. Procedimiento práctico:

    • Exportar wp_posts desde phpMyAdmin como respaldo SQL.
    • Ejecutar:
      CHECK TABLE `wp_posts`;

      para confirmar el estado.

    • Si CHECK indica corrupción, ejecutar:
      REPAIR TABLE `wp_posts` QUICK;
    • Si la reparación informa éxito, ejecutar:
      OPTIMIZE TABLE `wp_posts`;
    • Comprobar el sitio y revisar logs de errores para cualquier inconsistencia.

    Si REPAIR no soluciona el problema, reconstruir la tabla con la copia exportada puede ser la salida más segura: crear tabla nueva, importar datos y ajustar índices.

    Limitaciones de phpMyAdmin y cuándo pedir intervención del soporte

    phpMyAdmin es excelente para la mayoría de reparaciones, pero tiene límites en hosting compartido:

    • Acceso restringido a archivos físicos (.MYI/.MYD) y comandos de consola como myisamchk.
    • Operaciones EXTENDED y OPTIMIZE en tablas muy grandes pueden exceder los límites de tiempo o memoria del PHP.
    • Si la tabla impide el arranque normal del servicio o los backups fallan, solicita al soporte del proveedor que ejecute herramientas de bajo nivel.

    Para conocimiento técnico, la referencia de MySQL sobre reparación de tablas es útil: REPAIR TABLE – MySQL Documentation.

    Monitorización y alertas post-reparación

    Tras reparar y optimizar, conviene:

    • Configurar alertas de espacio en disco y uso de tablas grandes.
    • Revisar cron jobs y sincronizaciones que puedan generar escrituras masivas.
    • Programar verificaciones periódicas con CHECK TABLE para tablas críticas.

    Resumen y recomendaciones finales

    En hosting compartido, phpMyAdmin ofrece las herramientas necesarias para detectar, reparar y optimizar tablas MyISAM de forma segura si sigues buenos procedimientos: siempre hacer backups, usar CHECK TABLE antes de reparar, preferir REPAIR TABLE QUICK para daños leves y EXTENDED sólo si es necesario. Si las reparaciones fallan o la tabla es muy grande, solicita al soporte que use myisamchk o que restaure desde un backup. A medio plazo, valora migrar tablas críticas a InnoDB para mejorar la resiliencia y reducir riesgos.

    Para ampliar detalles técnicos sobre motores y comandos, consulta la documentación oficial de MySQL en MySQL Documentation y las funciones de MySQL en PHP en PHP Manual – mysqli.

    Aplicando estas prácticas protegerás tus datos, reducirás tiempos de inactividad y mejorarás la estabilidad del sitio en un entorno de hosting compartido.