¿Cuál es la forma correcta de revertir el modo estricto Mysql 5.7 de nuevo a como estaba en 5.6?


10

He actualizado nuestro servidor a Ubuntu 16, que incluye Mysql 5.7 y, de forma predeterminada, el modo estricto está habilitado (aunque no hay ninguna entrada en ninguno de los archivos de configuración).

Tenemos problemas para importar bases de datos que estaban en producción en mysql 5.6 y anteriores, y es debido al modo estricto. Por defecto, aquí está lo que está habilitado:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

¿Cómo puedo configurar mysql 5.7 para que funcione exactamente como lo hizo en 5.6 o para que las bases de datos de 5.6 sean compatibles con 5.7?


Pruebe esta respuesta: stackoverflow.com/a/34426883/534883 , aunque es para OSX, funcionó para mi en Ubuntu.
Pit

Respuestas:


34

Para deshabilitar el modo SQL estricto, ingrese SSH en su servidor como rooty cree este archivo:

/etc/mysql/conf.d/disable_strict_mode.cnf

Abra el archivo e ingrese estas dos líneas:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Reinicie MySQL con este comando:

sudo service mysql restart

Este cambio deshabilita dos configuraciones de modo SQL STRICT_TRANS_TABLESy ONLY_FULL_GROUP_BY, que se agregaron en MySQL 5.7 y causan problemas para algunas aplicaciones más antiguas.

Confirmar que el modo SQL estricto está deshabilitado

Puede confirmar que el modo SQL estricto está deshabilitado ejecutando este comando como root:

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Si el modo estricto está desactivado, no verá ningún resultado de ese comando.

Si deshabilitar el modo estricto le causa algún problema, puede habilitarlo nuevamente eliminando ese archivo y reiniciando MySQL nuevamente.

Fuente: Cómo deshabilitar el modo SQL estricto en MySQL 5.7


2
Esta es una respuesta correcta, y debería haber sido marcada como aceptada.
budhajeewa

¿Por qué ejecuta el comando mysql command devuelve mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!:?
Abhishek Saini

1
@AbhishekSaini, mira esto y esto .
Bilal

1
Esta es una respuesta Por favor, consulte esto como una respuesta.
Lasitha Benaragama

0

Establecer sql_modeen /etc/mysql/mysql.conf.d/mysqld.cnfsin STRICT_TRANS_TABLES.

Añadir debajo [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.