web-dev-qa-db-fra.com

Définissez sql_mode «vide» après la mise à niveau vers MySQL 5.6

Après la mise à niveau de MySQL de 5.5 vers 5.6, certaines de nos applications sont confrontées au problème et doivent définir sql_mode sur blanc pour résoudre ce problème. J'ai ajouté sql_mode = '' à my.cnf mais il n'y a eu aucun effet sur le paramètre mysql.

Comment garder le sql_mode vide?

7
Pardis

PROLOGUE

Quelqu'un m'a demandé la même chose dans mon organisation parce que tout le monde utilisait MySQL 5.5. Tous les serveurs DB ont été mis à niveau au cours des 8 derniers mois vers MySQL 5.6. Certaines applications clientes étaient affectées par sql_mode changer aussi.

CAUSE PREMIÈRE

Je viens de découvrir pourquoi ce que vous avez fait ne fonctionne pas et la solution de contournement est très simple.

Selon MySQL 5.5 Documentation, sql_mode default is a blank sting .

Selon MySQL 5.6 Documentation , sql_mode est par défaut est

  • chaîne vide dans MySQL 5.6.5 et retour
  • NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES en 5.6.6 et en GA

OK, j'espère que vous vous asseyez.

C'est la manière paresseuse qu'Oracle a implémentée sql_mode dans MySQL 5.6: Il y a un my.cnf fichier.

Si vous courez

cat /usr/my.cnf

vous verrez ce qui suit

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Voir la ligne 28?

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

SOLUTION

ÉTAPE 01 : commentez la ligne 28 de /usr/my.cnf

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

ÉTAPE 02 : Réglez sql_mode à la main

mysql> SET GLOBAL sql_mode = '';

C'EST CELA !!!

ÉPILOGUE

  • STEP 01 empêche les redémarrages de mysqld de changer sql_mode .
  • STEP 02 définit sql_mode maintenant, donc le redémarrage de mysqld n'est pas nécessaire immédiatement

ESSAIE !!!

6
RolandoMySQLDBA

Avec 5.7.13 (et éventuellement d'autres variantes de 5.7), l'astuce suivante fonctionne:

dans my.cnf:

sql_mode=ALLOW_INVALID_DATES

et redémarrez le serveur. Si vous ne souhaitez pas redémarrer, vous pouvez simplement faire:

set global sql_mode='ALLOW_INVALID_DATES'

puis mysqld oublie toutes ses valeurs par défaut pédantes et se comporte comme la configuration par défaut 5.5.

5
Sasha Pachev