Error en MySql: ERROR 1031 (HY000) Table storage engine for ‘table’ doesn’t have this option


Después de migrar de versión de MySql y actualizarme a la version 5.7, mis sql dejaron de funcionar y me percaté de que varias tablas no fueron importadas.

El mensaje que arrojaba el manejador es “Table storage engine for ‘nombre_tabla’ doesn’t have this option”, el cual no proporciona ninguna solución o la causa que originó el problema. Después de investigar y verificar, me topé con varios artículos (en inglés) que indicaban como pudo suceder y la solución. Para ayudar a otros a encontrar la respuesta, escribo este post.

Instalé el nuevo Ubuntu Server 16.04 y al instalar el mysql más actual, se instaló la versión 5.7, la cual es la que presenta este problema debido a que la base de datos que importé, tenía varias tablas de tipo “innodb” con un motor de almacenamiento que no le pertenece, en este caso puedes ver en las estructuras de las tablas: “ROW_FORMAT=FIXED”. Este tipo de almacenamiento se eliminó para “innodb” pero puede que funcione para tablas MyISAM, que por cierto la mayoría de mis tablas eran MyISAM, que fueron convertidas a innodb pero no se les cambió el row_format.

Solución:

La solución es simplemente eliminar “ROW_FORMAT=FIXED” antes de importarlo y así utilizará el que tenga por defecto. Ojo, esto sólo ocurre en la nueva versión porque está habilitado una opción “innodb_strict_mode” por defecto, pero sino tiene la opción habilitada, MySql mostrará un simple warning y continuará la importación, convirtiendo los  “FIXED” a “COMPACT” y no tendrás ningún problema.

Verificación:

Para verificar la opción actual del strict mode, puede usar el siguiente comando:

Lo podemos ver en la consola o en phpmyadmin. Las versiones anteriores de MySql por defecto lo tienen en “OFF” y a partir de la nueva version 5.7 la encontraremos en “ON”.

Anterior:

strict-mode-consola

Nueva:

strict-mode-phpmyadmin

 

Comúnmente esta configuración no se cambia, pero si deseas cambiarlo puedes hacerlo en archivo de configuración “my.cnf” que se puede encontrar “/etc/mysql/my.cnf” (Ubuntu Server)

Buscamos la línea donde indique “[mysqld]” (sino la tiene, créala al final), también ahí se definen las opciones de configuración de variable global, “sql_mode” que en versiones anteriores solo usaba una opción y en la nueva versión tiene múltiples que puede que te afecten, si posees algún otro problema, también las puedes modificar y dejarla como las versiones anteriores.

Agregando strict mode de innodb, al final del archivo, la opción es (ON/OFF):

[mysqld]

innodb_strict_mode = ON

Para los sql_mode, versiones anteriores:

[mysqld]

innodb_strict_mode = OFF

sql_mode=”NO_ENGINE_SUBSTITUTION”

Versiones nuevas a partir de MySql 5.7:

[mysqld]

innodb_strict_mode = ON

sql_mode=”STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION”

Y para reiniciar el servicio “service mysql restart” (puede variar según el sistema operativo).

Comparando estas configuraciones, podemos comprobar si están afectando a nuestra aplicación y podremos migrar a la nueva versión sin mayores inconvenientes, seleccionando las opciones que nos convengan. Muchas veces al ver las complicaciones después de una migración, optamos por devolvernos a la versión anterior. Con un poco de paciencia y leyendo, podemos adaptarnos a las nuevas versiones y mantenernos al día con la tecnología.

 

Comparte
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *