Строгий режим появился в MySQL ещё начиная с версии 5.1, но только в версии 5.7 он стал включённым по умолчанию. Если вы недавно обновили сервер, и внезапно ваше приложение перестало работать, то причиной мог стать как раз этот режим.
В Laravel вы можете исправить это прямо в коде: откройте файл настроек database.php и добавьте ключ strict со значением false. Но если вы используете не Laravel приложение (мы столкнулись с этой проблемой в CodeIgniter и в CraftCMS), у вас не будет такой возможности. Давайте разберёмся, как можно отключить строгий режим глобально на любом сервере Laravel Forge (и любом другом сервере Ubuntu).
Ваш файл настроек
На самом деле MySQL проверяет пять различных мест на наличие файлов настроек. Поэтому я бы вам рекомендовал внести изменения в несколько мест сразу. MySQL проверяет:
1. /etc/my.cnf
2. /etc/mysql/my.cnf
3. SYSCONFDIR/my.cnf
4. $MYSQL_HOME/my.cnf
5. ~/my.cnf
~/.my.cnf существует для каждого пользователя, а третий и четвертый конфиги зависят от особенностей вашей среды. Поэтому давайте разберёмся с одним из двух первых конфигов.
По умолчанию в Laravel Forge конфигурация MySQL находится в файле /etc/mysql/my.cnf, поэтому давайте разместим наши изменения там. Соединимся по SSH с сервером и, используя Vim или Pico, отредактируем этот файл.
Ваши строки
Если вы прокрутите файл немного вниз, то вы найдете раздел [mysqld]. Мы собираемся добавить новый ключ sql_mode. В MySQL 5.7 значения для этого ключа по умолчанию такие:
STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Строгий режим включается значением STRICT_TRANS_TABLES. Давайте исправим sql_mode и сделаем его таким же, как и значение по умолчанию, но только без строгого режима.
[mysqld] sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Готово! Сохраните файл и перезапустите MySQL. В командной строке это будет примерно так shsudo /etc/init.d/mysql restart
, или из интерфейса Laravel Forge, откройте сервер, щёлкните значок Restart Services в нижней части, и выберите Restart MySQL.
При использовании CraftCMS, а также некоторых версий Laravel, вам, возможно, понадобится отключить и опцию «ONLY_FULL_GROUP_BY».
Комментарии (1)
После обновления релиза до Ubuntu 16.04
(Server version: 5.7.12-0ubuntu1.1 — (Ubuntu)
Apache/2.4.18 (Ubuntu)
PHP extension: mysqli
PHP version: 7.0.4-7ubuntu2.1 )
долго искал что же делать с мускулом
(практически ничего не работало)
Ваши советы привели к полной работоспособности
старых вебприложений с новой версией мускула
Дополню только, что вносить изменения надо только в этот файл конфигурации
/etc/mysql/mysql.conf.d/mysqld.cnf
Конкретно, убрав опции
STRICT_TRANS_TABLES
ONLY_FULL_GROUP_BY
заработали такие приложения как
piwigo, moodle, glpi, т т.п.
Спасибо за конкретное и адекватное знание.