Подтвердить что ты не робот

Как сделать sql-mode = "NO_ENGINE_SUSSTITUTION" постоянным в MySQL my.cnf

UPDATE FIXED 1/18/15

После того, как мы недавно обновились до MySQL 5.6.27 (из репо Ubuntu), этот параметр теперь работает. Таким образом, это, похоже, было проблемой с предыдущей версией MySQL.

ОРИГИНАЛЬНЫЙ ВОПРОС

С новым обновлением до MySQL (5.6.20) обновления и вставки завершаются с ошибкой, если я не установил sql-mode в NO_ENGINE_SUSSTITUTION.

Благодаря документации я могу запустить следующее из терминала mysql и устранить проблему (временно):

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';`

Но в следующий раз, когда MySQL перезагрузится, эти настройки будут потеряны.

Итак, я попытался сделать это постоянным, отредактировав /etc/mysql/my.cnf(на моем стандартном сервере под управлением Ubuntu 12.04.5 LTS) и добавив настройки конфигурации, которые документация должна быть добавлена:

[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"

Альтернативные синтаксисы для тестирования

Просто для тестирования я также пробовал следующие форматы (которые не вызывают ошибок при перезапуске MySQL, но они не влияют на настройку).

# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
# underscore and quotes
sql_mode="NO_ENGINE_SUBSTITUTION"

Ничего не работает. После перезапуска этот параметр будет потерян, и я снова должен выполнить команды вручную с терминала mysql, чтобы снова выполнить сохранение.

Альтернативные расположения

  • Я знаю, что /etc/mysql/my.cnf ссылается, потому что у нас есть репликация, определенная в этом файле, и это работает.
  • В этом файле нет другой идентичной настройки, которая перезаписывает его.

Я получаю список файлов конфигурации, на которые ссылаются, запустив это из командной строки:

mysqld --help --verbose

Я вижу строку, которая гласит:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

Это местоположение по умолчанию, которое "смотрит" на файлы, это не означает, что он действительно нашел там файл, например. мой сервер не имеет /etc/my.cnf, /usr/etc/my.cnf или ~/.my.cnf.

Итак, похоже, что моя конфигурация в файле /etc/mysql/my.cnf является единственным файлом, на который ссылается mysql, и поэтому этот параметр не перезаписывается.

Логическое заключение тестирования

Логически тогда кажется, что синтаксис неверен или игнорируется по какой-то другой причине. Любые другие идеи?

4b9b3361

Ответ 1

Просто чтобы добавить мою конфигурацию в микс, я использую MySQL 5.7.8, который по умолчанию имеет те же строгие правила sql_mode.

  • Наконец я понял, что в моем /etc/mysql/my.conf работает следующее:

    [mysqld]
    sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    

то есть. тире, а не подчеркивание и кавычки вокруг значения.

  • У меня нет других файлов my.conf, кроме /etc/mysql/my.conf

  • Есть несколько дополнительных конфигураций, которые включают загрузку из /etc/mysql/conf.d/, но они пусты.

И это работает для меня.

Ответ 2

Это должно быть:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

вместо

[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"

затем перезапустите службу mysqld.

Ответ 3

Ваш сервер может читать другой my.cnf, чем тот, который вы редактируете (если вы не указали его при запуске mysqld).

Из Учебное руководство по сертификации по MySQL:

Порядок поиска включает в себя два общих файла опций, /etc/my.cnf и $MYSQL_HOME/my.cnf. Второй файл используется, только если MYSQL_HOMEзадана переменная среды. Как правило, вы просматриваете его в MySQL каталог установки. (Mysqld_safe script пытается установить MYSQL_HOME, если он не установлен перед запуском сервера.) вариант поиска файла опций также включает ~/.my.cnf (это домашний каталог). Это не особенно подходящее место для сервера опции. (Обычно вы вызываете сервер как mysql или как rootс опцией --user=mysql. Пользовательский файл, считанный сервер будет зависеть от того, с какой учетной записи вы его вызываете, возможно, приводит к использованию непоследовательных наборов опций.)

Другая возможность, конечно, состоит в том, что ваш параметр sql-mode будет перезаписан далее в том же файле. Множественные опции должны быть разделены , в одной строке.

P.S.: И вам нужны цитаты, IIRC. Теперь, когда вы пробовали его без кавычек, я уверен, вы редактируете неправильный файл, так как MySQL не запускается, когда в файле параметров есть ошибка.

P.P.S.: снова посмотрел на мои файлы конфигурации, там он

[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"

и он работает.

Ответ 4

Woks отлично для меня на ubuntu 16.04. путь:/etc/mysql/mysql.cnf

и вставьте это

[mysqld]
#
# * Basic Settings
#
sql_mode = "NO_ENGINE_SUBSTITUTION"

Ответ 5

Для меня это была проблема разрешения.

введите:

mysqld --verbose --help | grep -A 1 "Default options"

[Предупреждение] Файл конфигурации "/etc/mysql/my.cnf", записанный в мире, игнорируется.

Итак, попробуйте выполнить следующее, а затем перезапустите сервер

chmod 644 '/etc/mysql/my.cnf'

Он предоставит mysql доступ к чтению и записи в файл.

Ответ 6

Моя проблема заключалась в том, что у меня были пробелы между опциями 5.7.20. Удаление их, чтобы линия выглядела как

[mysqld]
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Ответ 7

В Linux Mint 18 находится конфигурационный файл по умолчанию, который имеет набор опций sql-mode:

/usr/my.cnf

И соответствующая строка:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Итак, вы можете установить там.

Если вы не уверены, какой конфигурационный файл имеет такую ​​опцию, вы можете его найти:

$ sudo find / -iname "*my.cnf*"

И получите список:

/var/lib/dpkg/alternatives/my.cnf
/usr/my.cnf
/etc/alternatives/my.cnf
/etc/mysql/my.cnf.fallback
/etc/mysql/my.cnf

Ответ 8

Решение довольно простое... Некоторое время искали, и получается, что вам просто нужно отредактировать 2 файла конфигурации:

  • /usr/my.cnf
  • /etc/mysql/my.cnf

в обоих файлах вы должны будете добавить:

[mysqld]
...
sql_mode=NO_ENGINE_SUBSTITUTION

По крайней мере, это то, что работает для 5.6.24-2 + deb.sury.org ~ точный + 2

Ответ 9

Если вы используете mariadb, вам нужно изменить файл mariadb.cnf, расположенный в файле /etc/mysql/conf.d/.

Я предположил, что материал для любых других решений на основе my-sql одинаковый.

Ответ 10

Я использую WHM 10.2.15-MariaDB. Чтобы навсегда отключить строгий режим, сначала выясните, какой файл конфигурации предпочитает наша установка. Для этого нам нужно местоположение binarys:

$ which mysqld
/usr/sbin/mysqld

Затем мы используем этот путь для выполнения поиска:

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Мы видим, что первый предпочитаемый файл конфигурации находится в корне папки etc, но есть второй скрытый файл .cnf - ~/.my.cnf. Добавление следующего в файл ~/.my.cnf навсегда отключил строгий режим для меня (должен быть в разделе mysqld):

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

Я обнаружил, что добавление строки в /etc/my.cnf не имеет никакого эффекта, кроме как сводит меня с ума.

Ответ 11

[Исправлено] Версия сервера: 10.1.38-MariaDB - бинарный дистрибутив mariadb.org

Перейдите по адресу: C:\xampp\mysql\bin, откройте my.ini в блокноте и найдите [mysqld] (строка № 27), затем после этой строки (строка № 28) просто введите: skip-grant-tables

сохраните файл, а затем перезагрузите страницу phpmyadmin. Это сработало для меня.

Ответ 12

Для меня обе клавиши для sql-mode работали. Использовал ли я

# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION

или

# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION

в файле my.ini не сделало никакой разницы, и оба были приняты, насколько я мог проверить.

Что действительно изменило ситуацию, так это отсутствие новой строки в конце файла my.ini.

Так что у всех есть проблемы с этим или схожие проблемы с my.ini/my.cnf: убедитесь, что в конце файла есть пустая строка!

Протестировано с использованием MySQL 5.7.27.