Який правильний спосіб повернути суворий режим Mysql 5.7 до того, як він був у 5.6?


10

Я оновив наш сервер до Ubuntu 16, який включає Mysql 5.7, і за замовчуванням включений жорсткий режим (хоча для нього немає жодного запису в жодному з файлів конфігурації).

У нас виникають проблеми з імпортом баз даних, які були у виробництві за версією mysql 5.6 і раніше, і це через суворий режим. За замовчуванням, ось що включено:

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

Як я можу налаштувати mysql 5.7 так, щоб він працював так само, як це робилося в 5.6, або так, щоб бази даних від 5.6 були сумісні з 5.7?


Спробуйте цю відповідь: stackoverflow.com/a/34426883/534883 подія, хоча це для OSX, вона працювала для мого на Ubuntu.
Піт

Відповіді:


34

Щоб вимкнути суворий режим SQL, введіть SSH на ваш сервер як rootі створіть цей файл:

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

Відкрийте файл і введіть ці два рядки:

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

Перезапустіть MySQL за допомогою цієї команди:

sudo service mysql restart

Ця зміна вимикає два налаштування режиму SQL STRICT_TRANS_TABLESі ONLY_FULL_GROUP_BY, які були додані в MySQL 5.7, і спричиняє проблеми для деяких старих програм.

Підтвердження строгого режиму SQL вимкнено

Ви можете підтвердити, що жорсткий режим SQL вимкнено, виконавши цю команду як root:

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

Якщо жорсткий режим вимкнено, ви не побачите жодного виводу з цієї команди.

Якщо вимкнення суворого режиму викликає у вас будь-які проблеми, ви можете ввімкнути його знову, видаливши цей файл і знову перезапустивши MySQL.

Джерело: Як відключити жорсткий режим SQL в MySQL 5.7


2
Це правильна відповідь, і це повинно бути позначено як прийняте.
budhajeewa

Чому запущена команда mysql повертає команду mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!:?
Абхішек Саїні

1
@AbhishekSaini, поглянь на це і це .
Білал

1
Це відповідь. Будь ласка, розгляньте це як відповідь.
Ласіта Бенарагама

0

Встановити sql_modeв /etc/mysql/mysql.conf.d/mysqld.cnfбез STRICT_TRANS_TABLES.

Додати під [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.