Я просто сделал новую установку человечности 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/.
Какие-либо идеи, что я сделал неправильно?Заранее спасибо
С 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-режима.
Я столкнулся с той же проблемой и провел около 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 нефункциональным, поэтому это заставило меня поверить, что есть только один файл, и я редактирую правильный. В то время как в реальном мире есть и другие файлы, которые переопределяют настройки.
Надеюсь, это поможет кому-то, кто борется с той же проблемой.