Ошибка MySQL/Amazon RDS: "у вас нет привилегий SUPER..."
Я пытаюсь скопировать мою базу данных mysql из Amazon EC2 в RDS:
Я успешно удалил mysqldump
моей базы данных в свою корневую папку, используя следующую команду:
[email protected]:~# mysqldump my_database -u my_username -p > my_database.sql
Затем я попытался перенести этот .sql файл в мою новую базу данных RDS:
[email protected]:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
К сожалению, я получаю следующее сообщение об ошибке:
You do not have the SUPER privilege and binary logging is enabled
(you *might* want to use the less safe log_bin_trust_function_creators variable)
Я пытался использовать GRANT SUPER..
различными способами, но я получаю ошибки, когда я тоже пытаюсь это сделать. Ввод mysql > FLUSH privileges;
тоже не работает.
Я новичок mysql, так жаль такой простой вопрос. Мысли?
Ответы
Ответ 1
В http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ вам нужно установить log_bin_trust_function_creators
в 1 в консоли AWS, чтобы загрузите файл дампа без ошибок.
Если вы хотите проигнорировать эти ошибки и загрузить остальную часть файла дампа, вы можете использовать опцию -f
:
mysql -f my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
-f
сообщит об ошибках, но продолжит обработку оставшейся части файла дампа.
Ответ 2
- Откройте веб-консоль RDS.
- Откройте вкладку "Группы параметров".
- Создайте новую группу параметров. В диалоговом окне выберите семейство MySQL, совместимое с версией базы данных MySQL, дайте ему имя и подтвердите. Выберите только что созданную группу параметров и выполните команду "Редактировать параметры".
- Найдите параметр log_bin_trust_function_creators и установите для него значение 1.
- Сохраните изменения.
- Откройте вкладку "Экземпляры". Разверните свой экземпляр MySQL и выполните "Действие экземпляра" с именем "Изменить".
- Выберите только что созданную группу параметров и включите "Применить немедленно".
- Нажмите "Продолжить" и подтвердите изменения.
- Дождитесь завершения операции "Модификация".
- Снова откройте вкладку "Экземпляры". Разверните свой экземпляр MySQL, разверните вкладку "Действие экземпляра" и выберите "Перезагрузка".
Ответ 3
Проблема с триггерами и хранимыми процедурами в файле дампа заключается в том, что эти определения включают пользователя, которому должна быть создана хранимая процедура, DEFINER. Пользователь, скорее всего, не существует в RDS, поэтому возникает ошибка. Чтобы загрузить файл дампа, вы можете удалить DEFINER с помощью sed или Perl и создать хранимую процедуру/триггер с пользователем, который выполняет импорт.
perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql
Теперь вы можете загрузить файл фиксированного дампа
mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql
Как сказано в более раннем ответе, вы должны установить параметр DB:
log_bin_trust_function_creators = 1
Ответ 4
Как определено в документации AWS, триггеры, процедуры и функции по умолчанию отключены, поскольку двоичное ведение журнала включено по умолчанию. Отключение в основном делает вашу базу данных более безопасной, но если вы правильно защищены через сеть, это не будет иметь значения.
Выполните следующие действия, и ваша проблема будет исправлена https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
Также не следует использовать определители при создании процедур. Простая команда sed может удалить его.
Ответ 5
В дополнение к редактированию
log_bin_trust_function_creators = 1
вам нужно удалить все DEFINER из файла дампа, проверьте следующую ссылку для команды SED, которая поможет очистить файл дампа sql.
https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243
Ответ 6
Для меня в файле дампа было только две команды, которые требовали привилегий SUPER:
-
SET @@GLOBAL.gtid_purged
-
SET @@SESSION.SQL_LOG_BIN
В соответствии с документами mysqldump вы можете отключить их с помощью --set-gtid-purged=OFF
.
Затем, глядя на человека mysqldump:
Используйте ON, если вы хотите развернуть новое ведомое устройство репликации, используя только некоторые данные с дамп-сервера. Используйте OFF, если целью является восстановление таблицы путем копирования ее в топологию. Используйте OFF, если целью является копирование таблицы между топологиями репликации, которые не пересекаются и останутся таковыми.
Поэтому я решил добавить --set-gtid-purged=OFF
к моей команде mysqldump
и тогда я смог успешно импортировать полученный файл дампа.