Решил залить проект на свежий 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";'