it-swarm.com.de

Setzen Sie sql_mode nach dem Upgrade auf MySQL 5.6 auf "leer"

Nach dem Upgrade von MySQL von 5.5 auf 5.6 haben einige unserer Apps Probleme und müssen sql_mode auf leer setzen, um dieses Problem zu lösen. Ich fügte hinzu sql_mode = '' bis my.cnf aber es gab keine Auswirkung auf die MySQL-Einstellung.

Wie halte ich den sql_mode leer?

7
Pardis

PROLOG

Jemand hat in meiner Organisation dasselbe von mir verlangt, weil alle MySQL 5.5 verwendeten. Alle DB-Server wurden in den letzten 8 Monaten auf MySQL 5.6 aktualisiert. Einige Clientanwendungen waren ebenfalls von der Änderung von sql_mode Betroffen.

URSACHE

Ich habe gerade herausgefunden, warum das, was Sie getan haben, nicht funktioniert und die Problemumgehung sehr einfach ist.

Laut MySQL 5.5-Dokumentation ist sql_mode standardmäßig ein leerer Stich .

Laut MySQL 5.6 Documentation ist sql_mode standardmäßig

  • leere Zeichenfolge in MySQL 5.6.5 und zurück
  • NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES In 5.6.6 und in GA

OK, ich hoffe du setzt dich.

Dies ist die träge Art und Weise, wie Oracle sql_mode in MySQL 5.6 implementiert hat: Es gibt eine zusätzliche my.cnf - Datei.

Wenn du läufst

cat /usr/my.cnf

sie werden Folgendes sehen

# 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

Siehe Zeile 28?

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

LÖSUNG

SCHRITT 01 : Kommentieren Sie Zeile 28 von /usr/my.cnf Aus.

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

SCHRITT 02 : Setzen Sie sql_mode von Hand

mysql> SET GLOBAL sql_mode = '';

DAS IST ES !!!

EPILOG

  • STEP 01 Verhindert, dass sich Neustarts von mysqld ändern sql_mode .
  • STEP 02 Setzt jetzt sql_mode , sodass ein sofortiger Neustart von mysqld nicht erforderlich ist

VERSUCHE ES !!!

6
RolandoMySQLDBA

Mit 5.7.13 (und möglicherweise anderen 5.7-Varianten) funktioniert der folgende Trick:

im my.cnf:

sql_mode=ALLOW_INVALID_DATES

und starten Sie den Server neu. Wenn Sie nicht neu starten möchten, können Sie einfach Folgendes tun:

set global sql_mode='ALLOW_INVALID_DATES'

dann vergisst mysqld alle pedantischen Standardeinstellungen und verhält sich wie in der Standardkonfiguration 5.5.

5
Sasha Pachev