Подтвердить что ты не робот

Ошибка 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, так жаль такой простой вопрос. Мысли?

4b9b3361

Ответ 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

  1. Откройте веб-консоль RDS.
  2. Откройте вкладку "Группы параметров".
  3. Создайте новую группу параметров. В диалоговом окне выберите семейство MySQL, совместимое с версией базы данных MySQL, дайте ему имя и подтвердите. Выберите только что созданную группу параметров и выполните команду "Редактировать параметры".
  4. Найдите параметр log_bin_trust_function_creators и установите для него значение 1.
  5. Сохраните изменения.
  6. Откройте вкладку "Экземпляры". Разверните свой экземпляр MySQL и выполните "Действие экземпляра" с именем "Изменить".
  7. Выберите только что созданную группу параметров и включите "Применить немедленно".
  8. Нажмите "Продолжить" и подтвердите изменения.
  9. Дождитесь завершения операции "Модификация".
  10. Снова откройте вкладку "Экземпляры". Разверните свой экземпляр 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 может удалить его.

Ответ 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 и тогда я смог успешно импортировать полученный файл дампа.