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