Quelle est la bonne façon de rétablir le mode strict de Mysql 5.7 à ce qu'il était en 5.6?


10

J'ai mis à niveau notre serveur vers Ubuntu 16 qui inclut Mysql 5.7 et, par défaut, le mode strict est activé (bien qu'il n'y ait aucune entrée pour cela dans aucun des fichiers de configuration).

Nous rencontrons des problèmes lors de l'importation de bases de données qui étaient en production sous mysql 5.6 et versions antérieures, et cela est dû au mode strict. Par défaut, voici ce qui est activé:

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

Comment puis-je configurer mysql 5.7 pour fonctionner exactement comme il l'a fait dans 5.6 ou pour que les bases de données de 5.6 soient compatibles avec 5.7?


Essayez cette réponse: stackoverflow.com/a/34426883/534883 bien que ce soit pour OSX, cela a fonctionné pour moi sur Ubuntu.
Pit

Réponses:


34

Pour désactiver le mode SQL strict, connectez-vous à votre serveur en tant que rootet créez ce fichier:

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

Ouvrez le fichier et entrez ces deux lignes:

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

Redémarrez MySQL avec cette commande:

sudo service mysql restart

Cette modification désactive deux paramètres du mode SQL STRICT_TRANS_TABLESet ONLY_FULL_GROUP_BYqui ont été ajoutés dans MySQL 5.7 et provoquent des problèmes pour certaines applications plus anciennes.

Confirmation du mode SQL strict est désactivé

Vous pouvez confirmer que le mode SQL strict est désactivé en exécutant cette commande en tant que root:

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

Si le mode strict est désactivé, vous ne verrez aucune sortie de cette commande.

Si la désactivation du mode strict vous pose des problèmes, vous pouvez le réactiver en supprimant ce fichier et en redémarrant MySQL.

Source: Comment désactiver le mode SQL strict dans MySQL 5.7


2
C'est une bonne réponse, et cela aurait dû être marqué comme accepté.
budhajeewa

Pourquoi l'exécution de la commande mysql renvoie- mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!t-elle:?
Abhishek Saini

1
@AbhishekSaini, jetez un œil à ceci et cela .
Bilal

1
Ceci est une réponse. Veuillez renvoyer ceci comme réponse.
Lasitha Benaragama

0

Mettre sql_modeen /etc/mysql/mysql.conf.d/mysqld.cnfsans STRICT_TRANS_TABLES.

Ajouter sous [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.