Was ist der richtige Weg, um den strengen Mysql 5.7-Modus auf den Stand von 5.6 zurückzusetzen?

10

Ich habe unseren Server auf Ubuntu 16 aktualisiert, das MySQL 5.7 enthält, und standardmäßig ist der strikte Modus aktiviert (obwohl in keiner der Konfigurationsdateien ein Eintrag dafür vorhanden ist).

Wir haben Probleme beim Importieren von Datenbanken, die unter MySQL 5.6 und früher in Produktion waren, und das liegt am strengen Modus. Standardmäßig ist Folgendes aktiviert:

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

Wie kann ich MySQL 5.7 so konfigurieren, dass es genau wie in 5.6 funktioniert, sodass Datenbanken ab 5.6 mit 5.7 kompatibel sind?

user658182
quelle
Versuchen Sie diese Antwort: stackoverflow.com/a/34426883/534883 Ereignis, obwohl es für OSX ist, funktionierte es für mein unter Ubuntu.
Pit

Antworten:

34

Um den strengen SQL-Modus zu deaktivieren, stellen Sie SSH auf Ihren Server als rootund erstellen Sie diese Datei:

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

Öffnen Sie die Datei und geben Sie diese beiden Zeilen ein:

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

Starten Sie MySQL mit diesem Befehl neu:

sudo service mysql restart

Diese Änderung deaktiviert zwei SQL - Modus - Einstellungen, STRICT_TRANS_TABLESund ONLY_FULL_GROUP_BY, dass in MySQL 5.7 und verursachen Probleme für einige ältere Anwendungen hinzugefügt wurden.

Bestätigen, dass der strikte SQL-Modus deaktiviert ist

Sie können bestätigen, dass der strikte SQL-Modus deaktiviert ist, indem Sie diesen Befehl wie folgt ausführen root:

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

Wenn der strikte Modus deaktiviert ist, wird von diesem Befehl keine Ausgabe angezeigt.

Wenn das Deaktivieren des strengen Modus Probleme für Sie verursacht, können Sie ihn erneut aktivieren, indem Sie diese Datei löschen und MySQL erneut starten.

Quelle: Deaktivieren des strengen SQL-Modus in MySQL 5.7

Bilal
quelle
2
Dies ist eine korrekte Antwort, und diese sollte als akzeptiert markiert sein.
Budhajeewa
Warum gibt das Ausführen des Befehls mysql den Befehl zurück : 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, schau dir das und das an .
Bilal
1
Dies ist eine Antwort. Bitte beziehen Sie dies als Antwort.
Lasitha Benaragama
0

Stellen Sie sql_modein /etc/mysql/mysql.conf.d/mysqld.cnfohne STRICT_TRANS_TABLES.

Hinzufügen unter [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
quelle