Все новости

Ошибка MySQL 1227 в BitrixEnv после обновления или переноса: как исправить

Ошибка MySQL 1227 в BitrixEnv: решение после обновления до 9.0.10 или переноса сайта

После обновления BitrixEnv до версии 9.0.10 или при переносе сайта на новый сервер нередко возникает ошибка:

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
      

Она появляется, когда ядро Битрикс пытается отключить строгий режим InnoDB (innodb_strict_mode=0), но у пользователя базы данных нет нужных привилегий. Ниже — понятные варианты решения, которые подходят именно для BitrixEnv и типовых сценариев миграции

Почему возникает ошибка

  • Битрикс автоматически пытается сбросить режим: ядро делает запрос SET innodb_strict_mode=0, чтобы избежать жёсткой проверки данных InnoDB.
  • Ограничение прав на сервере: для выполнения такого SET нужны привилегии SESSION_VARIABLES_ADMIN или SYSTEM_VARIABLES_ADMIN, которые по умолчанию не выдаются обычным пользователям БД.
  • Изменение конфигурации при обновлении/переносе: на новом сервере или после обновления BitrixEnv настройки MySQL могут быть «строже», а права пользователя — без расширенных привилегий.

Как исправить: 3 рабочих способа

Способ 1. Отключить innodb_strict_mode на уровне сервера (рекомендуется для BitrixEnv)

Это самый стабильный вариант: если режим выключен глобально, Битрикс не будет пытаться менять его в сессии — и ошибка не появится.

  1. Подключитесь к серверу по SSH.
  2. Откройте конфигурационный файл MySQL/MariaDB. Чаще всего это:
    • /etc/my.cnf
    • или /etc/mysql/my.cnf, /etc/my.cnf.d/mariadb.cnf (зависит от ОС и версии).
  3. В секции [mysqld] добавьте строку:
    [mysqld]
    innodb_strict_mode=OFF
              
  4. Перезапустите службу MySQL/MariaDB:
    systemctl restart mysqld
    # или
    systemctl restart mariadb
              
  5. Проверьте результат:
    mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_strict_mode';"
              
    Должно вернуться значение OFF.
Для БитриксEnv это предпочтительный способ: он устраняет первопричину и не требует изменения прав пользователей БД, что безопаснее и стабильнее при будущих обновлениях.

Способ 2. Выдать пользователю БД нужные привилегии (если нельзя менять конфиг)

Если у вас есть root-доступ к MySQL и нельзя редактировать конфиг, можно дать пользователю, под которым работает Битрикс, требуемые права.

GRANT SESSION_VARIABLES_ADMIN ON *.* TO 'bitrix0'@'localhost';
FLUSH PRIVILEGES;
      

Замените имя_пользователя на реального пользователя БД из настроек Битрикс (db.php). В некоторых версиях MySQL может потребоваться SYSTEM_VARIABLES_ADMIN.

Важно: на многих хостингах и в облачных базах данных такие привилегии не выдаются — это ограничение платформы. Если команда возвращает ошибку или не выполняется, обратитесь в поддержку хостинга.

Способ 3. Обратиться в поддержку (для хостинга, облака, managed-решений)

Если сервер не ваш (shared-хостинг, облачная БД без root-доступа), единственный корректный путь — запрос в техподдержку:

  • Попросите отключить innodb_strict_mode глобально на сервере.
  • Или попросите выдать пользователю БД привилегию SESSION_VARIABLES_ADMIN.

Не пытайтесь «обойти» ошибку через костыли в коде Битрикс — при обновлениях ядра такие правки будут перезаписаны, и ошибка вернётся.

Чего делать не стоит

  • Не добавляйте SET innodb_strict_mode=0 в PHP-код перед запросами: это избыточно и снова упрётся в права.
  • Не меняйте ядро Битрикс вручную, чтобы убрать попытку установки переменной — при обновлении всё вернётся обратно.
  • Не путайте с настройками PHP или модулей Битрикс: проблема исключительно на стороне MySQL и прав пользователя БД.

Как быстро проверить, что проблема решена

  1. Зайдите в консоль MySQL под root:
    mysql -u root -p
              
  2. Выполните:
    SHOW VARIABLES LIKE 'innodb_strict_mode';
              
    Убедитесь, что значение — OFF.
  3. Проверьте права пользователя, под которым работает сайт:
    SHOW GRANTS FOR 'имя_пользователя'@'localhost';
              
  4. Обновите страницу сайта или запустите установку/обновление Битрикс — ошибка больше не должна появляться.

Частые вопросы

Можно ли оставить innodb_strict_mode включённым?
Да, но тогда Битрикс не должен пытаться его отключать. Если ошибка возникает именно из-за попытки SET, проще выключить режим глобально — это стандартная практика для проектов на Битрикс.

Повлияет ли это на работу сайта?
Нет. Отключение innodb_strict_mode не ломает функционал Битрикс и не приводит к потере данных. Оно лишь убирает дополнительную проверку целостности данных на уровне движка InnoDB, которую Битрикс компенсирует своими механизмами.

Если вы не уверены, какой вариант выбрать, или нужна помощь с конкретной конфигурацией сервера — напишите детали (VPS/хостинг, ОС, версия MySQL/MariaDB), и мы подскажем точные шаги именно под вашу среду.