Jaki jest prawidłowy sposób przywrócenia trybu ścisłego MySQL 5.7 z powrotem do wersji 5.6?

10

Zaktualizowałem nasz serwer do Ubuntu 16, który zawiera Mysql 5.7 i domyślnie włączony jest tryb ścisły (chociaż nie ma na niego wpisu w żadnym z plików konfiguracyjnych).

Mamy problemy z importowaniem baz danych, które były w produkcji w wersji mysql 5.6 i wcześniejszych, i to z powodu trybu ścisłego. Domyślnie oto, co jest włączone:

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

Jak mogę skonfigurować mysql 5.7 tak, aby działał dokładnie tak, jak w wersji 5.6, aby bazy danych z wersji 5.6 były zgodne z wersją 5.7?

użytkownik658182
źródło
Wypróbuj tę odpowiedź: stackoverflow.com/a/34426883/534883 zdarzenie, chociaż jest dla OSX, działało dla mojego na Ubuntu.
Pit

Odpowiedzi:

34

Aby wyłączyć tryb ścisłego SQL, włóż SSH do serwera jako rooti utwórz ten plik:

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

Otwórz plik i wprowadź następujące dwa wiersze:

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

Uruchom ponownie MySQL za pomocą tego polecenia:

sudo service mysql restart

Zmiana ta wyłącza dwa ustawienia trybu SQL, STRICT_TRANS_TABLESoraz ONLY_FULL_GROUP_BY, że zostały dodane w MySQL 5.7 i stwarzają problemy dla niektórych starszych aplikacji.

Potwierdzanie ścisłego trybu SQL jest wyłączone

Możesz potwierdzić, że tryb ścisłego SQL jest wyłączony, uruchamiając to polecenie jako root:

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

Jeśli tryb ścisły jest wyłączony, nie zobaczysz żadnych danych wyjściowych z tego polecenia.

Jeśli wyłączenie trybu ścisłego powoduje jakiekolwiek problemy, możesz włączyć go ponownie, usuwając ten plik i ponownie uruchamiając MySQL.

Źródło: Jak wyłączyć tryb ścisłego SQL w MySQL 5.7

Bilal
źródło
2
To poprawna odpowiedź i powinna była zostać oznaczona jako zaakceptowana.
budhajeewa
Dlaczego uruchamianie komend mysql powroty: 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, spójrz na to i to .
Bilal
1
To jest odpowiedź. Proszę odnieść się do tego jako odpowiedzi.
Lasitha Benaragama,
0

Ustaw sql_modew /etc/mysql/mysql.conf.d/mysqld.cnfbez STRICT_TRANS_TABLES.

Dodaj poniżej [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Rama Shankar Singh
źródło