Ошибки

MySQL 1227: you need the SUPER privilege — ошибка при загрузке дампа

Ошибка 1227 при загрузке дампа значит, что в файле указан пользователь со старого сервера. Создать от его имени представление или триггер может только администратор. Уберите эти пометки из файла.

Обновлено 10.10.2026≈ 4 мин чтения
Содержание 9

Как выглядит ошибка

В MySQL:

ERROR 1227 (42000) at line 1234: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation

В MariaDB:

ERROR 1227 (42000) at line 1234: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation

at line 1234 — номер строки в файле дампа. Откройте файл и посмотрите на эту строку — в ней будет слово DEFINER.

Почему так

Представления, триггеры и процедуры в базе запоминают, кто их создал. mysqldump записывает это в дамп словом DEFINER, например так:

/*!50017 DEFINER=`olduser`@`localhost` */

Здесь olduser — пользователь базы на старом сервере или хостинге. На новом сервере вы загружаете дамп под своим пользователем, а создать объект от имени другого пользователя может только администратор с правом SUPER. Поэтому загрузка останавливается.

Шаг 1. Сделайте копию файла

Команды выполняйте в той папке, где лежит файл дампа. Посмотреть файлы в текущей папке можно командой ls.

cp base.sql base-kopiya.sql

Шаг 2. Уберите DEFINER из файла

На сервере с Ubuntu или в Linux:

sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' base.sql

На Mac в программе Терминал:

sed -i '' 's/DEFINER=`[^`]*`@`[^`]*`//g' base.sql

Команду копируйте целиком: в ней обратные кавычки, а не одинарные. Она удаляет только пометки DEFINER=…, остальной файл не меняется. Проверьте результат:

grep -c DEFINER= base.sql

Ответ 0 значит, что пометок не осталось. Без них представления и триггеры создадутся от имени того пользователя, под которым вы загружаете дамп.

Шаг 3. Загрузите дамп снова

mysql -u ivan -p base < base.sql

Вместо ivan подставьте своего пользователя базы, вместо base — имя базы, вместо base.sql — имя своего файла. Команда спросит пароль пользователя базы. Загружать файл заново можно в ту же базу: mysqldump по умолчанию пишет перед каждой таблицей команду удалить её, поэтому таблицы, которые успели загрузиться до ошибки, создадутся заново.

Почему не загружать дамп под root

Под администратором ошибки 1227 не будет, но объекты запомнят пользователя olduser, которого на новом сервере нет. Тогда ошибка появится позже, когда сайт обратится к такому представлению или триггеру:

ERROR 1449 (HY000): The user specified as a definer ('olduser'@'localhost') does not exist

Поэтому надёжнее убрать DEFINER из файла, как в шаге 2.

Если загружаете через панель хостинга

Выполните шаг 2 на своём компьютере и загрузите исправленный файл в панели снова. На Windows команды sed нет: откройте файл в редакторе, который умеет искать и заменять текст, и удалите пометки DEFINER= вместе с именем пользователя и адресом.

Тексты ошибок и настройки сверены с исходным кодом MySQL 8.0.46 и MariaDB 10.11.14 — эти версии ставятся из пакетов Ubuntu 24.04. В других версиях строки могут немного отличаться.

Источники

Сверено 10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026