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

Cómo arreglar el error 'Table doesn't exist' en MySQL

Actualizado el 26 de mayo de 2026

¡Hola! Soy tu técnico de soporte amigable. Si has llegado hasta aquí, seguramente te has encontrado con el temido mensaje "Table 'nombre_de_tabla' doesn't exist" en MySQL. No te preocupes, es un error muy común y, en la mayoría de los casos, tiene una solución sencilla. En esta guía extensa y detallada, te explicaré paso a paso cómo diagnosticar y solucionar error MySQL table de forma segura, incluso si no eres un experto en bases de datos.

Vamos a desglosar este problema, entender sus causas y aplicar las soluciones más efectivas. Recuerda que trabajaremos siempre con cuidado, ya que estamos manipulando información sensible. ¡Manos a la obra!


¿Qué significa el error "Table doesn't exist" en MySQL?

Este error aparece cuando MySQL intenta acceder a una tabla que, según su registro interno (el diccionario de datos), debería existir, pero por alguna razón no la encuentra en el sistema de archivos del servidor. Es como si tuviéramos un índice de una biblioteca que dice que un libro está en el estante 3, pero al ir a buscarlo, el libro no está. El sistema se confunde y te avisa que no puede completar la operación.

Las causas más habituales son:

  • Problemas en el sistema de archivos: El archivo físico de la tabla (.ibd para tablas InnoDB, .MYD y .MYI para MyISAM) se ha borrado, movido o dañado accidentalmente.
  • Corrupción de metadatos: La información interna de MySQL sobre la tabla (en la carpeta mysql o en el diccionario de datos) se ha corrompido, aunque el archivo físico exista.
  • Diferencias entre mayúsculas y minúsculas: En sistemas Linux, los nombres de tablas y bases de datos distinguen entre mayúsculas y minúsculas. Si creaste la tabla como MiTabla y luego intentas acceder como mitabla, MySQL no la encontrará.
  • Restauración incompleta o migración fallida: Al mover una base de datos de un servidor a otro, es posible que algunas tablas no se hayan copiado correctamente.
  • Cierre abrupto del servidor: Un corte de luz o un fallo del sistema mientras MySQL estaba escribiendo en la tabla puede dejarla en un estado inconsistente.

Diagnóstico inicial: ¿Qué ha pasado?

Antes de lanzarnos a reparar, debemos entender el alcance del problema. Aquí tienes los pasos para diagnosticar correctamente.

1. Identifica el contexto del error

Anota exactamente el mensaje de error que ves. Por ejemplo:
ERROR 1146 (42S02): Table 'mibasededatos.mitabla' doesn't exist

¿Cuándo aparece? ¿Al hacer una consulta, al iniciar un script, al acceder a tu web? Esto nos dará pistas sobre la causa.

2. Verifica con comandos básicos

Conéctate a tu servidor MySQL (por ejemplo, desde la terminal o usando phpMyAdmin). Ejecuta estos comandos:

-- Muestra todas las bases de datos
SHOW DATABASES;

-- Selecciona la base de datos donde está la tabla
USE nombre_de_tu_base_de_datos;

-- Muestra todas las tablas de esa base de datos
SHOW TABLES;

Si al ejecutar SHOW TABLES; la tabla problemática no aparece en la lista, es probable que el archivo físico se haya perdido o que la tabla nunca se creó correctamente. Si sí aparece, pero al hacer un SELECT * FROM mitabla; obtienes el error, entonces el problema está en los metadatos o en la integridad del archivo.

[WARNING] No ejecutes comandos de reparación sin antes hacer una copia de seguridad de la base de datos. Si no tienes una copia, intenta detener MySQL (con sudo systemctl stop mysql) y copia toda la carpeta de datos (normalmente /var/lib/mysql/) a un lugar seguro, como /var/lib/mysql_backup/. Esto te permitirá restaurar si algo sale mal.


Soluciones paso a paso para solucionar el error "Table doesn't exist"

Aquí tienes las soluciones más efectivas, ordenadas de la más simple a la más avanzada.

Solución 1: Revisar la sensibilidad a mayúsculas/minúsculas

Esta es la causa más simple y común, especialmente si migraste tu sitio de un servidor Windows a uno Linux.

  1. Conéctate a MySQL y ejecuta:
    SHOW VARIABLES LIKE 'lower_case_table_names';
    
  2. Si el valor es 0 (cero), significa que MySQL distingue entre mayúsculas y minúsculas.
  3. Asegúrate de que el nombre de la tabla en tu consulta coincida EXACTAMENTE (incluyendo mayúsculas) con el nombre que ves al ejecutar SHOW TABLES;.
  4. Si no puedes cambiar todas las consultas, puedes modificar la configuración de MySQL. Edita el archivo /etc/mysql/my.cnf o /etc/my.cnf y, en la sección [mysqld], agrega:
    [mysqld]
    lower_case_table_names=1
    

    [INFO] Cambiar lower_case_table_names a 1 hará que MySQL convierta todos los nombres de tablas a minúsculas. Ten cuidado, porque esto puede afectar a otras aplicaciones. Después de cambiar, reinicia MySQL: sudo systemctl restart mysql.

Solución 2: Reparar la tabla con comandos nativos (MyISAM)

Si la tabla es de tipo MyISAM (lo más común en sitios antiguos o configuraciones básicas), MySQL incluye herramientas de reparación.

  1. Conéctate a MySQL.
  2. Ejecuta el comando REPAIR TABLE:
    REPAIR TABLE nombre_de_tu_base_de_datos.mitabla;
    
  3. También puedes usar la herramienta externa myisamchk desde la terminal (detén MySQL primero):
    sudo systemctl stop mysql
    cd /var/lib/mysql/nombre_de_tu_base_de_datos/
    sudo myisamchk -r mitabla.MYI
    sudo systemctl start mysql
    

Solución 3: Reparar tablas InnoDB (más complejo)

Para tablas InnoDB (el motor moderno y más común), el proceso es más delicado. El archivo .ibd puede existir, pero el diccionario de datos de InnoDB (en el archivo ibdata1) no tiene registro de él.

Sub-solución 3.1: Usar ALTER TABLE ... ENGINE=InnoDB (forzar recreación)

A veces, forzar a MySQL a redefinir la tabla puede solucionar el problema.

  1. Crea una tabla temporal vacía con la misma estructura:
    CREATE TABLE mitabla_tmp LIKE mitabla;
    
    (Si este comando falla porque la tabla original no existe, salta a la solución 3.2).
  2. Luego, altera la tabla temporal para que use InnoDB y luego bórrala:
    ALTER TABLE mitabla_tmp ENGINE=InnoDB;
    DROP TABLE mitabla_tmp;
    
  3. Finalmente, intenta acceder a la tabla original. Si el error persiste, pasa a la siguiente solución.

Sub-solución 3.2: Crear la tabla manualmente y descartar el tablespace (para valientes)

Esta solución es para cuando el archivo .ibd existe pero la tabla no se reconoce. Es un poco técnica, pero muy efectiva.

  1. Detén MySQL: sudo systemctl stop mysql
  2. Haz una copia de seguridad del archivo .ibd: Ve a la carpeta de tu base de datos (/var/lib/mysql/nombre_base_datos/) y copia el archivo mitabla.ibd a un lugar seguro, por ejemplo, mitabla.ibd.bak.
  3. Inicia MySQL en modo seguro (sin red): sudo mysqld_safe --skip-grant-tables & (esto inicia MySQL sin verificar usuarios, solo para reparar).
  4. Conéctate a MySQL (sin contraseña, porque estamos en modo seguro).
  5. Elimina la tabla problemática del diccionario de datos (esto no borra el archivo físico):
    DROP TABLE nombre_de_tu_base_de_datos.mitabla;
    
    (Si este comando falla porque la tabla no existe en el diccionario, no te preocupes, sigue adelante).
  6. Crea una nueva tabla con la misma estructura (necesitas conocer la estructura exacta, o si tienes un respaldo de la estructura):
    CREATE TABLE nombre_de_tu_base_de_datos.mitabla ( ... ) ENGINE=InnoDB;
    
    Si no recuerdas la estructura, puedes crearla con una sola columna temporal, por ejemplo: CREATE TABLE mitabla (id INT PRIMARY KEY) ENGINE=InnoDB;.
  7. Descarta el tablespace de la nueva tabla (MySQL liberará el archivo .ibd recién creado):
    ALTER TABLE nombre_de_tu_base_de_datos.mitabla DISCARD TABLESPACE;
    
  8. Detén MySQL (mata el proceso): sudo killall mysqld (o sudo pkill -9 mysqld).
  9. Reemplaza el archivo .ibd:
    • Ve a la carpeta de la base de datos.
    • Elimina el archivo .ibd que se creó en el paso 6 (es un archivo vacío).
    • Renombra tu copia de seguridad (mitabla.ibd.bak) a mitabla.ibd.
  10. Inicia MySQL normalmente: sudo systemctl start mysql.
  11. Importa el tablespace (MySQL ahora asociará el archivo .ibd a la tabla):
    ALTER TABLE nombre_de_tu_base_de_datos.mitabla IMPORT TABLESPACE;
    

    [TIP] Este proceso puede dar errores si la estructura de la tabla no coincide exactamente. Si falla, tendrás que recrear la tabla con la estructura correcta. Si no la tienes, lamentablemente la recuperación será más difícil.

Solución 4: Usar herramientas de terceros (como Syspanel/HestiaCP)

Si tu hosting utiliza Syspanel (antes conocido como HestiaCP), el panel de control te ofrece herramientas gráficas para gestionar bases de datos.

  1. Accede a Syspanel a través de tu navegador usando la dirección: https://tudominio.com:2106 (el puerto es 2106).
  2. Inicia sesión con tu usuario y contraseña de administrador.
  3. Ve a la sección "Bases de Datos" o "DB".
  4. Busca la base de datos afectada. Syspanel suele mostrar un botón de "Reparar" o "Check" junto a cada base de datos.
  5. Haz clic en "Reparar". Syspanel ejecutará automáticamente comandos de verificación y reparación (como mysqlcheck).
  6. Si el problema persiste, desde Syspanel puedes hacer una copia de seguridad de la base de datos (opción "Backup") y luego restaurarla (opción "Restore"). A veces, este proceso fuerza a MySQL a reindexar y reparar la tabla.

[INFO] Syspanel facilita mucho la gestión, pero si la tabla está muy dañada, es posible que la reparación desde el panel no sea suficiente. En ese caso, tendrás que recurrir a las soluciones manuales descritas anteriormente.

Solución 5: Restaurar desde una copia de seguridad (la más segura)

Si nada de lo anterior funciona, o si no te sientes cómodo con comandos avanzados, la opción más segura es restaurar la base de datos desde una copia de seguridad reciente.

  1. Localiza tu copia de seguridad: Puede ser un archivo .sql, .gz o .zip. Si usas Syspanel, las copias suelen estar en /backup/.
  2. Elimina la base de datos problemática (desde Syspanel o con DROP DATABASE nombre_base_datos;).
  3. Crea una nueva base de datos vacía con el mismo nombre.
  4. Importa la copia de seguridad:
    • Desde Syspanel: Ve a "Bases de Datos", selecciona la base de datos y usa la opción "Restore".
    • Desde la terminal:
      mysql -u usuario -p nombre_base_datos < /ruta/de/tu/copia.sql
      
      (Te pedirá la contraseña).

[WARNING] Esta solución borrará cualquier cambio que hayas hecho en la base de datos después de la fecha de la copia de seguridad. Por eso es crucial tener copias de seguridad periódicas.


Preguntas Frecuentes (FAQ) sobre el error "Table doesn't exist"

P: ¿Puedo perder datos al reparar la tabla?
R: Sí, existe un riesgo. Siempre haz una copia de seguridad antes de intentar cualquier reparación. Las soluciones como REPAIR TABLE o la manipulación de archivos .ibd pueden corromper aún más los datos si no se hacen correctamente.

P: ¿Este error afecta a todas las tablas o solo a una?
R: Normalmente solo afecta a una tabla específica. Si el error aparece con muchas tablas, es probable que el problema sea más grave, como una corrupción de la base de datos completa o un fallo del disco duro.

P: ¿Por qué aparece este error después de migrar mi sitio web?
R: Es muy común. Las causas más frecuentes son:

  • Diferencias en la sensibilidad a mayúsculas/minúsculas (Linux vs Windows).
  • Incompatibilidad de versiones de MySQL (por ejemplo, de MySQL 5.7 a 8.0).
  • El proceso de copia no incluyó todos los archivos (especialmente los de InnoDB).

P: ¿Qué hago si el comando REPAIR TABLE no funciona?
R: Prueba con CHECK TABLE mitabla; para ver el estado. Luego, intenta con REPAIR TABLE mitabla USE_FRM; (si la tabla es MyISAM). Si sigue sin funcionar, pasa a las soluciones para InnoDB o restaura desde backup.

P: ¿Es seguro usar DROP TABLE si no tengo backup?
R: NUNCA uses DROP TABLE sin tener una copia de seguridad. Aunque el archivo .ibd exista, al ejecutar DROP TABLE, MySQL elimina la referencia en el diccionario de datos y, en muchos casos, también el archivo físico. Si no tienes backup, podrías perder los datos para siempre.

P: ¿Cómo puedo prevenir este error en el futuro?
R:

  • Realiza copias de seguridad automáticas diarias (Syspanel lo permite fácilmente).
  • Mantén tu servidor y MySQL actualizados.
  • Evita apagar el servidor de forma abrupta; usa siempre shutdown o reboot correctamente.
  • Si migras bases de datos, asegúrate de que la versión de MySQL sea compatible y de que los nombres de tablas usen minúsculas (configura lower_case_table_names=1).

Conclusión final

El error "Table doesn't exist" en MySQL puede ser frustrante, pero como has visto, tiene múltiples vías de solución. Desde un simple ajuste de mayúsculas hasta la manipulación avanzada de archivos InnoDB, siempre hay una opción para recuperar tus datos.

Recuerda:

  • Siempre haz una copia de seguridad antes de cualquier reparación.
  • Diagnostica primero: ¿la tabla aparece en SHOW TABLES? ¿El archivo .ibd existe?
  • Prueba las soluciones en orden de menor a mayor riesgo: empezando por la sensibilidad a mayúsculas, luego REPAIR TABLE, y si es necesario, las técnicas InnoDB.
  • Si usas Syspanel (puerto 2106), aprovecha sus herramientas de reparación y backup, son muy útiles.

Si después de todo esto el error persiste, puede ser necesario contactar con un administrador de sistemas o con el soporte técnico de tu hosting. Pero con esta guía, tienes todas las herramientas para solucionar error MySQL table por ti mismo en la mayoría de los casos.

¡Espero que este artículo te haya sido de gran ayuda! Si tienes más dudas, no dudes en consultar. ¡Buena suerte con tu base de datos!

¿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