После переноса сайта на битриксе на другой хостинг, иногда возникает ошибка Mysql query error: (1227).
[Bitrix\Main\DB\SqlQueryException]
Mysql query error: (1227) Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation (400)
SET innodb_strict_mode=0
/home/d/www/public_html/bitrix/modules/main/lib/db/mysqliconnection.php:149
Такая ошибка может возникнуть при переходе с более старых версий MySQL на новые. В MySQL 8.0 и более поздних версиях изменилась система привилегий, и теперь требуется отдельное право SYSTEM_VARIABLES_ADMIN
или SESSION_VARIABLES_ADMIN
для изменения системных переменных, таких как innodb_strict_mode
. В более старых версиях пользователи могли менять этот параметр без дополнительных прав. В новых версиях MySQL по умолчанию innodb_strict_mode
включен, а в старых он мог быть выключен.
Если в after_connect_d7.php
прописано SET innodb_strict_mode=0
, но нет нужных прав, появится ошибка 1227. В последних версиях MySQL разработчики усилили контроль над изменением глобальных и сессионных переменных. Если раньше можно было устанавливать SET innodb_strict_mode=0
без ограничений, то теперь это доступно только пользователям с расширенными привилегиями.
Открываем файл /bitrix/php_interface/after_connect_d7.php
.
Находим строку:
$this->queryExecute("SET innodb_strict_mode=0");
Комментируем её, добавив //
в начале строки:
// $this->queryExecute("SET innodb_strict_mode=0");
Если ошибка сохраняется, необходимо обратиться в техническую поддержку хостинга и уточнить возможность изменения параметра innodb_strict_mode
.
Попробовать изменить настройки базы данных через файл конфигурации MySQL (my.cnf
), если у вас есть доступ к серверу.
Проверить, не влияет ли параметр innodb_strict_mode
на работоспособность сайта, и если да, адаптировать код Битрикс без его отключения.
После внесения изменений рекомендуется очистить кэш битрикса и протестировать работу сайта.