Solucionar el error que se puede producir en una base de datos MySQL o MariaDB: Error Code: 1286. Unknown storage engine ‘InnoDB’.

Error Code: 1286. Unknown storage engine ‘InnoDB’ en MySQL MariaDB

En determinadas ocasiones puede producirse el siguiente error al intentar acceder una tabla de una base de datos en MySQL o MariaDB:

Error Code: 1286. Unknown storage engine ‘InnoDB’.

También puede aparecer el error como:

SQL Error: Unknown table engine ‘InnoDB’

Este error es debido a que el motor (engine) InnoDB no está disponible en el servidor de base de datos MariaDB o MySQL.

MySQL/MariaDB soporta varios motores (engines) para la creación y tratamiento de tablas, como son:

Motor (Engine)DescripciónSoporta transacciones
InnoDBSoporte transaccional (ACID) (commits, rollbacks), bloqueo a nivel de fila ( Permite mayor concurrencia (lecturas/escrituras simultáneas), soporta integridad referencial con restricciones (claves foráneas), optimizado para entornos con lecturas y escrituras. Ideal para aplicaciones transaccionales (aplicaciones de escritorio), sistemas con alta concurrencia o donde la integridad es crítica
MyISAMSin transacciones (ACID) (no soporta transacciones, commits o rollbacks), solo permite operaciones concurrentes de lectura, optimizado para consultas SELECT rápidas, sin integridad referencial (no admite claves foráneas ni restricciones de integridad). Ideal para bases de datos de solo lectura, para aplicaciones con más lecturas que escrituras (típicamente sitios web)No
AriaSoporta ACID (transaccional) si se usa con tablas TRANSACTIONAL=1, menos concurrencia que InnoDB, pero mejor que MyISAM, más resistente a corrupción que MyISAM, caché en memoria y optimizado para SELECT. Puede ser una buena opción como reemplazo moderno de MyISAM cuando se busca mayor seguridad sin perder velocidad en lecturasNo (pero puede tener gestión de transacciones básico)
MemoryTablas en RAM (máxima velocidad, operaciones a nivel de memoria),sin persistencia (los datos se pierden al reiniciar el servidor), índices HASH o BTREE (búsquedas ultra rápidas). Uso típico en cachés temporales, sesiones, tablas intermedias en ETL o procesos batchNo
MRG_MYISAMCombina múltiples tablas MyISAM (crea una vista unificada de varias tablas idénticas (misma estructura), solo operaciones SELECT/INSERT, sin almacenamiento propio, rendimiento en lecturas (Bueno para consultas SELECT en grandes volúmenes de datos distribuidos. Uso típico: logs o datos históricos divididos por fechas, escenarios donde se necesita sharding simple sin complejidad adicionalNo

Existen más engines, como BLACKHOLE, CSV, ARCHIVE, FEDERATED o PERFORMANCE_SCHEMA, aunque los habitualmente usados son los anteriores.

El error que nos ocupa, es debido a que MySQL/MariaDB no ha podido cargar el motor InnoDB, por lo que las tablas que tengan este motor no podrán ser usadas. Y las causas pueden ser varias:

  • Que esté desactivado su uso.
  • Que haya algún parámetro de configuración de InnoDB erróneo.
  • Otras.

Solución al error Code: 1286. Unknown storage engine ‘InnoDB’ en MySQL MariaDB

Este error puede ser debido a varias causas, por lo que puede tener varias soluciones, en función del motivo.

Solución si el motivo es por estar desactivado su uso

Si el motivo es porque está desactivado su uso, seguiremos los siguientes pasos para intentar solucionarlo. En primer lugar accederemos a MySQL desde su línea de comandos, ejecutando el comando:

Nos solicitará contraseña para el usuario, la introduciremos y, desde la línea de comandos de MySQL/MariaDB, escribiremos el siguiente comando:

Nos devolverá los motores soportados por el servidor de base de datos y si están habilitados o no (columna «Support»). En un ejemplo donde InnoDB no está habilitado nos mostrará lo siguiente:

En este caso, revisaremos el fichero de configuración de MySQL/MariaDB, que según la distribución de Linux, según la versión de MySQL o MariaDB y según si es un equipo Windows puede estar ubicado en una carpeta u otra. En el caso de un equipo Linux CentOS 7 con MariaDB 5.5, el fichero de configuración reside en:

/etc/my.cnf

Mientras que en una máquina Linux Ubuntu 20, con MariaDB 10.11, el fichero de configuración puede estar en:

/etc/mysql/mariadb.conf.d/50-server.cnf

En otros equipos puede estar en:

/etc/mysql/my.cnf

En el caso de equipos con Windows, el fichero de configuración de MySQL/MariaDB puede estar en ubicaciones como:

C:\Program files\MariaDB 11.7\data\my.ini

%WINDIR%\my.ini o my.cnf

Editaremos este fichero con cualquier editor de texto plano y buscaremos alguna línea como las siguientes (en función de la versión de MySQL/MariaDB):

Puedes comentarla añadiendo delante el carácter almohadilla «#», quedando:

Guardando los cambios en el fichero y reiniciando el servicio de MySQL/MariaDB con:

O bien:

O bien:

O:

En el caso de equipos Windows, reiniciaremos el servicio desde los servicios de Windows (services.msc).

Dependerá, como siempre, de la distribución de Linux y de la base de datos MySQL/MariaDB.

Una vez reiniciado el servicio de MySQL, volveremos a ejecuta en su línea de comandos el comando:

Nos deberá aparecer habilitado el motor InnoDB y con esto habremos resuelto el problema:

Solución si el motivo es por algún parámetro de configuración erróneo

Cuando hemos establecido algún parámetro de configuración de InnoDB, bien sea modificando algún valor de un parámetro existente o bien añadiendo alguno nuevo y esta configuración no es correcta o no es compatible con el motor InnoDB de la versión actual de MySQL/MariaDB, puede que el motor no arranque y no esté disponible. Si ejecutamos la misma instrucción que anteriormente, para ver los motores disponibles:

Y no nos aparece la línea del motor «InnoDB»:

El motivo podría ser el indicado. Para comprobar y obtener más información del parámetro que esté produciendo el error en la carga del engine InnoDB, visualizaremos el fichero de log de MySQL/MariaDB, que suele estar en:

/var/log/mysql/error.log

O bien en:

/var/log/mysql/mysql.log

O bien en:

/var/log/mariadb/mariadb.log

Analizaremos el fichero de log en busca de algún mensaje de error en la carga de algún parámetro relacionado con InnoDB. Si lo encontramos, comentaremos o modificaremos el valor de dicho parámetro para solucionar el error en el fichero de configuración de MySQL/MariaDB.