MySQL игнорирует любые my.cnf конфигурации

Я просто сделал новую установку человечности 18.04 и MySQL из Ubuntu repo (5.7.22-0ubuntu18.04.1 (Ubuntu)).

MySQL работает до сих пор, но я должен заменить некоторые переменные. Пытаясь изменить sql-режим на "STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION".

Таким образом, я поместил новый файл "mysqld_custom.cnf" в/etc/mysql/mysql.conf.d/:

[mysqld]
skip-external-locking
bind_address            = 127.0.0.1
sql_mode                = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

query_cache_limit       = 1M
query_cache_size        = 16M

performance_schema      = 1

log_error = /var/log/mysql/error.log
slow_query_log_file = /var/log/mysql/mysql-slow.log
slow_query_log          = 1
long_query_time         = 2
log_queries_not_using_indexes

expire_logs_days = 10
max_binlog_size   = 100M

general_log_file = /var/log/mysql/query.log
general_log = 1

Все выглядело хорошо./usr/sbin/mysqld - подробный - справка дает мне

sql-mode  STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

и это кажется хорошо с mysqld - значения по умолчанию печати:

# mysqld --print-defaults
mysqld would have been started with the following arguments:
--skip-external-locking --bind_address=127.0.0.1 --sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --query_cache_limit=1M --query_cache_size=16M --performance_schema=1 --log_error=/var/log/mysql/error.log --slow_query_log_file=/var/log/mysql/mysql-slow.log --slow_query_log=1 --long_query_time=2 --log_queries_not_using_indexes --expire_logs_days=10 --max_binlog_size=100M --general_log_file=/var/log/mysql/query.log --general_log=1

Но рабочий сервер говорит:

mysql> SHOW GLOBAL  VARIABLES LIKE "sql_mode";
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> SHOW GLOBAL  VARIABLES LIKE "%general_log%";
+------------------+-----------------------------+
| Variable_name    | Value                       |
+------------------+-----------------------------+
| general_log      | OFF                         |
| general_log_file | /var/lib/mysql/ubuntu18.log |
+------------------+-----------------------------+
2 rows in set (0.00 sec)

Я пытался поместить "mysqld_custom.cnf" в/etc/mysql/conf.d/и в/etc/mysql/mysql.conf.d/.

Какие-либо идеи, что я сделал неправильно?Заранее спасибо

2
задан 20 July 2018 в 19:58

2 ответа

С sql_mode изменения опции Вы можете 2 опции быть:

  • Изменение без перезапуска DB установлено глобальный sql_mode с командой:

    SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

  • Опция 2: Вы файл конфигурации: /etc/mysql/my.cnf (ОБНОВЛЕНИЕ: Более новые версии Mysql например, 5.7.8 или выше может потребовать немного отличающегося синтаксиса),

    sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

и restart service mysql

Удостоверьтесь, что существует тире между sql-moden не подчеркивание и это режимы находятся в двойных кавычках.

Всегда ссылайтесь на MySQL Docs для своей версии для наблюдения опций sql-режима.

0
ответ дан 2 December 2019 в 07:18

Я столкнулся с той же проблемой и провел около 2 дней, но я думаю, что у меня наконец-то это получилось. Существует несколько конфигураций, распределенных по всей системе, и чтобы найти одну или те, которые отвечают за установку sql_mode я использовал следующую команду:

sudo grep --include=*.cnf -rnw '/' -e "sql[-_]mode"

(Информацию о том, как работает команда, можно прочитать здесь: https://stackoverflow.com/a/16957078/1806628)

Эта команда буквально ищет каждый файл из корня, чтобы увидеть, которые содержат тексты sql_mode или sql-mode, и для меня она нашла дополнительные конфигурации с их значениями по умолчанию по адресу:

/usr/share/mysql/my-default.cnf:31:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
/usr/my.cnf:28:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

После того, как я изменил значения там и перезапустил сервис, значения окончательно изменились.

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

Надеюсь, это поможет кому-то, кто борется с той же проблемой.

1
ответ дан 19 December 2021 в 15:54

Другие вопросы по тегам:

Похожие вопросы: