LINUX.ORG.RU
решено ФорумAdmin

Тонкая настройка MySQL 5.7.12. Запуск без параметра `ONLY_FULL_GROUP_BY`

 ,


0

1

Решил залить проект на свежий ubuntu 16.04 с MySQL 5.7.12 и нашел грабли. Проект не работает с параметром ONLY_FULL_GROUP_BY, который включен по умолчанию.

Отключаю лишний параметр так.

1. Смотрю, с какими настройками бежит MySQL:

mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@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.00 sec)

2. Оставляю все, кроме лишнего:

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SET global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SET session sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
exit

Но все это работает до перезагрузки сервера. Как добавить это в конфигурацию MySQL сервера?

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html - читатал, не помогло. По оффициальной документации: «To set the SQL mode at server startup, use the ... sql-mode="modes" in an option file such as my.cnf ...»

В ubuntu 16.04 несколько мест, где лежат конфигурации mysql. В /etc/mysql/my.cnf ярлык на /etc/alternatives/my.cnf в нем:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

В /etc/mysql/conf.d/ есть mysql.cnf c:

[mysql]

Пробовал в файл /etc/mysql/conf.d/mysql.cnf добавлять вниз это:

sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

или это:

sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

Перезапускал сервис и получал соответственно:

# mysql -u root -p
mysql: [ERROR] unknown variable 'sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# mysql -u root -p
mysql: [ERROR] unknown variable 'sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";'

Попробовал себе добавить в my.cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLE

Всё работает. Пробовал на 5.6 и 5.7

melkor217 ★★★★★ ()
Ответ на: комментарий от melkor217

А где у Вас лежит my.cnf? Это ярлык?

Попробовал написать без кавычек и с пробелами перед и после «=», и нижним подчеркиванием в sql_mode.

Правил в /etc/mysql/conf.d/mysql.cnf

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Выводит:

mysql: [ERROR] unknown variable 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
dopedopedope ()
Ответ на: комментарий от dopedopedope

А где у Вас лежит my.cnf?

добавляй в /etc/mysql/my.cnf

[mysql]

добавляй в секцию [mysqld]

Это ярлык?

здесь нет ярлыков, только ссылки

kiotoze ★★★★ ()
Ответ на: комментарий от dopedopedope

Чтобы конфиг прочитался, можно куда угодно вписать, лишь бы в секцию [mysqld]. Если хочешь сделать правильно, то создай себе файл типа /etc/mysql/mysql.conf.d/sql_mode.cnf и впиши туда.

melkor217 ★★★★★ ()
Ответ на: комментарий от melkor217

Круто!!! Спасибо! (=

Помогло реально.

Оказывается, нужно было вписывать в секцию [mysqld].

dopedopedope ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.