MySQL 1227: you need the SUPER privilege — ошибка при загрузке дампа
Ошибка 1227 при загрузке дампа значит, что в файле указан пользователь со старого сервера. Создать от его имени представление или триггер может только администратор. Уберите эти пометки из файла.
Содержание 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 operationat 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. В других версиях строки могут немного отличаться.
Источники
- Исходный код MySQL 8.0.46: messages_to_clients.txt — тексты ошибок сервера MySQL.
- Исходный код MariaDB 10.11.14: errmsg-utf8.txt — тексты ошибок сервера MariaDB.
- Исходный код MySQL 8.0.46: sql_view.cc — для чужого DEFINER нужны SUPER или SET_USER_ID.
- Исходный код MariaDB 10.11.14: sql_parse.cc — для чужого DEFINER нужны SUPER или SET USER.
- Исходный код MySQL 8.0.46: mysqldump.cc — как DEFINER записывается в дамп.
- Справочник ошибок сервера MySQL 8.0 — номера, коды SQLSTATE и тексты.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026