Как правильно вернуть строгий режим 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
Это правильный ответ, и он должен быть помечен как принятый.
Буджаева

Почему при выполнении команды 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.