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

Cómo cambiar el motor de almacenamiento de una tabla en MySQL

Actualizado el 20 de mayo de 2026

Has llegado al lugar indicado si alguna vez te has preguntado cómo cambiar el motor de almacenamiento de una tabla en MySQL. Es una tarea más común de lo que crees, sobre todo cuando necesitas mejorar el rendimiento, la seguridad de los datos o simplemente estás migrando un proyecto antiguo a un servidor más moderno. Aquí te lo explico paso a paso, con ejemplos prácticos y consejos para que no te pierdas en el intento.

¿Qué es un motor de almacenamiento en MySQL?

Antes de meternos en faena, vamos a aclarar qué es eso del motor de almacenamiento. Piensa en MySQL como una gran biblioteca. Los libros son tus datos (tablas, registros, índices). El motor de almacenamiento es el sistema de estanterías y organización que usas para guardar y recuperar esos libros. Cada tipo de estantería tiene sus ventajas: unas son más rápidas para buscar, otras protegen mejor los libros contra incendios (caídas del sistema), y otras permiten tener muchos libros apilados sin ocupar tanto espacio.

Los dos motores más populares son InnoDB y MyISAM. InnoDB es el moderno, seguro y recomendado para casi todo hoy en día. MyISAM es el clásico, más rápido en lecturas simples pero con menos protección. Cambiar entre ellos es algo que muchos administradores hacen para optimizar sus bases de datos.

¿Por qué querrías cambiar el motor de almacenamiento?

Las razones son variadas, pero las más comunes incluyen:

  • Mejorar la integridad de los datos: InnoDB soporta transacciones (ACID), lo que significa que si una operación falla a medias, los datos no se corrompen. MyISAM no tiene esta protección.
  • Añadir claves foráneas: Si necesitas relaciones entre tablas (por ejemplo, que un pedido siempre esté vinculado a un cliente existente), necesitas InnoDB. MyISAM no soporta claves foráneas.
  • Rendimiento en escrituras: InnoDB suele ser mejor cuando tienes muchas operaciones de escritura simultáneas (INSERT, UPDATE, DELETE). MyISAM bloquea toda la tabla durante una escritura, lo que puede ralentizar todo.
  • Compatibilidad con versiones antiguas: Si estás migrando una base de datos de un MySQL muy viejo (anterior a 5.5), es posible que algunas tablas sigan siendo MyISAM y quieras actualizarlas a InnoDB para aprovechar las nuevas características.
  • Espacio en disco: A veces, MyISAM puede ocupar menos espacio que InnoDB en tablas muy simples, aunque InnoDB tiene compresión avanzada que puede ser más eficiente.

Requisitos previos antes de cambiar el motor

No te lances sin preparación. Aquí tienes una lista de verificación rápida:

  • Acceso a MySQL: Necesitas un usuario con permisos para modificar tablas (ALTER). Normalmente, el usuario root o un usuario con privilegios de administrador de la base de datos te vale.
  • Copia de seguridad: Siempre, siempre, siempre haz una copia de seguridad de la base de datos antes de hacer cambios estructurales. Un simple mysqldump te salvará de un disgusto.
  • Conocimiento de tu tabla: Identifica qué motor tiene actualmente la tabla. Lo verás en phpMyAdmin, en la línea de comandos o con la consulta SHOW TABLE STATUS.
  • Versión de MySQL: Asegúrate de que tu versión de MySQL soporte el motor al que quieres cambiar. InnoDB está disponible desde MySQL 5.5 en adelante como predeterminado.

Cómo ver el motor actual de una tabla

Antes de cambiar, es bueno saber con qué estás trabajando. Puedes hacerlo de varias formas:

Opción 1: Usando phpMyAdmin

Entra a phpMyAdmin (normalmente en tu panel de control como Syspanel, accesible por el puerto 2106). Selecciona la base de datos, luego la tabla. En la pestaña "Estructura" o en los detalles de la tabla, verás el campo "Motor" o "Engine".

Opción 2: Usando la línea de comandos de MySQL

Conéctate a tu servidor MySQL (vía SSH o terminal) y ejecuta:

SHOW TABLE STATUS LIKE 'nombre_de_tu_tabla';

Busca la columna Engine. Te dirá si es InnoDB, MyISAM, Memory, etc.

Opción 3: Consulta directa

SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nombre_base_datos' AND TABLE_NAME = 'nombre_tabla';

El método principal: ALTER TABLE

Esta es la forma directa y más común de cambiar el motor. La sintaxis es muy sencilla:

ALTER TABLE nombre_tabla ENGINE = InnoDB;

O si quieres cambiar a MyISAM:

ALTER TABLE nombre_tabla ENGINE = MyISAM;

Ejemplo práctico paso a paso

Imagina que tienes una tabla llamada clientes en la base de datos mi_empresa y quieres cambiarla de MyISAM a InnoDB.

  1. Conéctate a MySQL: Abre tu terminal o cliente MySQL.
  2. Selecciona la base de datos: USE mi_empresa;
  3. Verifica el motor actual: SHOW TABLE STATUS LIKE 'clientes'; (deberías ver Engine: MyISAM).
  4. Ejecuta el cambio: ALTER TABLE clientes ENGINE = InnoDB;
  5. Verifica el cambio: Vuelve a ejecutar SHOW TABLE STATUS LIKE 'clientes'; y ahora verás Engine: InnoDB.

[TIP] Si la tabla es muy grande (millones de registros), este proceso puede tomar varios minutos o incluso horas. Durante ese tiempo, la tabla estará bloqueada para escrituras y lecturas (dependiendo del motor y la versión de MySQL). Planifica el cambio en una ventana de mantenimiento.

Cambiar el motor por defecto para nuevas tablas

Si quieres que todas las tablas nuevas que crees usen un motor específico, puedes cambiar la configuración global de MySQL. Esto no afecta a las tablas existentes.

En la línea de comandos de MySQL:

SET GLOBAL default_storage_engine = InnoDB;

En el archivo de configuración (my.cnf o my.ini):

Busca la línea default-storage-engine y cámbiala a InnoDB. Si no existe, agrégala en la sección [mysqld].

[mysqld]
default-storage-engine = InnoDB

Luego reinicia el servicio de MySQL para que el cambio surta efecto.

Consideraciones importantes al cambiar de MyISAM a InnoDB

Cambiar no es solo ejecutar un comando. Hay diferencias fundamentales que debes conocer:

Índices de texto completo (FULLTEXT)

MyISAM soporta índices FULLTEXT de forma nativa. En versiones antiguas de MySQL (anteriores a 5.6), InnoDB no los soportaba. Si tienes una tabla con búsquedas de texto completo, al cambiar a InnoDB perderás esos índices. En MySQL 5.6 y superiores, InnoDB ya soporta FULLTEXT, así que si tienes una versión moderna, no hay problema.

[WARNING] Si tu tabla usa índices FULLTEXT y estás en MySQL < 5.6, el ALTER TABLE fallará o los índices se eliminarán. Primero migra a una versión más reciente o replantea la búsqueda.

Claves foráneas (Foreign Keys)

InnoDB las soporta, MyISAM no. Si al cambiar de MyISAM a InnoDB, la tabla tiene columnas que podrían ser claves foráneas, no pasa nada. Pero si después quieres añadir una clave foránea, InnoDB te lo permitirá. Al revés (de InnoDB a MyISAM), si la tabla tiene claves foráneas, el cambio fallará. Debes eliminar las claves foráneas antes.

AUTO_INCREMENT y bloqueos

InnoDB maneja los AUTO_INCREMENT de forma diferente. En MyISAM, el contador se guarda en el archivo de la tabla. En InnoDB, se guarda en memoria y se recalcula al reiniciar el servidor. Esto puede causar que los números de auto-incremento no sean consecutivos después de un reinicio (algo normal y no problemático).

Tamaño de la tabla

InnoDB suele ocupar más espacio en disco que MyISAM para la misma cantidad de datos, debido a su estructura de almacenamiento (tablaspaces, doble buffer, etc.). Sin embargo, InnoDB ofrece compresión de tablas que puede reducir el tamaño.

Cómo cambiar el motor de varias tablas a la vez

Si tienes muchas tablas y quieres cambiarlas todas a InnoDB, no necesitas hacerlo una por una. Puedes generar los comandos automáticamente.

Desde la línea de comandos de MySQL:

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' ENGINE = InnoDB;') AS comando
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'nombre_base_datos' AND ENGINE = 'MyISAM';

Esto te devolverá una lista de comandos ALTER TABLE. Luego copias y pegas esos comandos para ejecutarlos. O si te atreves, puedes crear un procedimiento almacenado para ejecutarlos todos.

Solución de problemas comunes

Error #1033 - "Incorrect file format"

Esto suele ocurrir si el archivo físico de la tabla está corrupto o si hay problemas de permisos. Prueba a reparar la tabla primero con REPAIR TABLE nombre_tabla; o CHECK TABLE nombre_tabla;.

Error #1050 - "Table already exists"

Si estás intentando crear una tabla con el mismo nombre, pero el cambio con ALTER TABLE debería funcionar. Si da este error, puede ser un problema de caché. Prueba a limpiar la caché con FLUSH TABLES;.

El cambio tarda mucho o se cuelga

Para tablas muy grandes, el ALTER TABLE puede ser lento. Puedes usar la herramienta pt-online-schema-change de Percona Toolkit para hacer el cambio sin bloquear la tabla, pero eso ya es más avanzado. Otra opción es crear una tabla nueva con el motor deseado, copiar los datos con INSERT ... SELECT y luego renombrar las tablas.

FAQ: Preguntas frecuentes

¿Puedo cambiar el motor de una tabla con datos?
Sí, el comando ALTER TABLE funciona incluso si la tabla tiene millones de registros. Solo ten en cuenta el tiempo de bloqueo.

¿Pierdo mis datos al cambiar el motor?
No, los datos se conservan. El motor solo cambia cómo se almacenan y gestionan internamente.

¿Es recomendable cambiar todas las tablas a InnoDB?
En general sí, a menos que tengas una razón muy específica para usar MyISAM (por ejemplo, tablas muy grandes con solo lecturas y sin necesidad de transacciones). InnoDB es más robusto y escalable.

¿Cómo sé si mi MySQL soporta InnoDB?
Ejecuta SHOW ENGINES; en la línea de comandos. Si ves InnoDB con Support: YES, estás listo.

¿Afecta esto al rendimiento de mi web?
Depende. Para sitios con muchas escrituras o transacciones, notarás una mejora. Para sitios puramente de lectura, quizás notes una ligera bajada, pero la seguridad de los datos compensa.

Conclusión

Cambiar el motor de almacenamiento de una tabla en MySQL es un proceso sencillo pero que requiere planificación. Con el comando ALTER TABLE puedes hacer el cambio en segundos, pero siempre ten en cuenta las diferencias entre motores y haz una copia de seguridad antes. Si sigues estos pasos, podrás optimizar tu base de datos para que sea más rápida, segura y confiable.

Recuerda que si usas Syspanel (accesible por el puerto 2106), puedes gestionar tus bases de datos fácilmente desde phpMyAdmin, y desde ahí también puedes ejecutar estos comandos. Si tienes dudas, prueba primero en un entorno de desarrollo. ¡Buena suerte con tu migració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