Qual è il modo corretto per ripristinare la modalità rigorosa di Mysql 5.7 a come era in 5.6?


10

Ho aggiornato il nostro server a Ubuntu 16 che include Mysql 5.7 e, per impostazione predefinita, la modalità Strict è abilitata (sebbene non ci sia voce per esso in nessuno dei file di configurazione).

Stiamo riscontrando problemi durante l'importazione di database in produzione con MySQL 5.6 e versioni precedenti, ed è a causa della modalità rigorosa. Per impostazione predefinita, ecco cosa è abilitato:

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

Come posso configurare mysql 5.7 per funzionare esattamente come in 5.6 o in modo che i database da 5.6 siano compatibili con 5.7?


Prova questa risposta: stackoverflow.com/a/34426883/534883 evento anche se è per OSX, ha funzionato per il mio su Ubuntu.
Pit

Risposte:


34

Per disabilitare la modalità SQL rigorosa, SSH nel server come roote creare questo file:

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

Apri il file e inserisci queste due righe:

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

Riavvia MySQL con questo comando:

sudo service mysql restart

Questa modifica disabilita due impostazioni della modalità SQL STRICT_TRANS_TABLESe ONLY_FULL_GROUP_BY, che sono state aggiunte in MySQL 5.7 e causano problemi per alcune applicazioni meno recenti.

La conferma della modalità SQL rigorosa è disabilitata

È possibile confermare che la modalità SQL rigorosa è disabilitata eseguendo questo comando come root:

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

Se la modalità rigorosa è disabilitata, non verrà visualizzato alcun output da quel comando.

Se la disabilitazione della modalità rigorosa causa problemi, è possibile riattivarla eliminando quel file e riavviando nuovamente MySQL.

Fonte: Come disabilitare la modalità SQL rigorosa in MySQL 5.7


2
Questa è una risposta corretta e dovrebbe essere contrassegnata come accettata.
Budhajeewa,

Perché l'esecuzione del comando comando di MySQL restituisce: 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, dai un'occhiata a questo e questo .
Bilal,

1
Questa è una risposta Si prega di riferire questo come una risposta.
Lasitha Benaragama,

0

Situato sql_modein /etc/mysql/mysql.conf.d/mysqld.cnfsenza STRICT_TRANS_TABLES.

Aggiungi sotto [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.