Я пытаюсь скопировать свою базу данных mysql с Amazon EC2 на RDS:
Я успешно поместил mysqldump
свою базу данных в свою корневую папку, используя это:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
Затем я попытался перенести этот файл .sql в свою новую базу данных RDS:
root@ip-xx-xx-xx-xx:~# 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, извините за такой простой вопрос. Мысли?
mysql
amazon-ec2
amazon-web-services
amazon-rds
grant
Тим Петерсон
источник
источник
GRANT SUPER
RDS. RDS не дает возможности получить СУПЕР привилегии.sql
файле естьCREATE FUNCTION
инструкция, для которой нужен привилегированный пользователь. см. этоОтветы:
Согласно http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ вам необходимо установить
log_bin_trust_function_creators
значение 1 в консоли AWS , чтобы загрузить файл дампа без ошибок.Если вы хотите игнорировать эти ошибки и загрузить остальную часть файла дампа, вы можете использовать
-f
опцию:Программа
-f
сообщит об ошибках, но продолжит обработку оставшейся части файла дампа.источник
-f
не помогло. У меня такая же ошибка. Используя вашу ссылку, у меня возникли проблемы с синтаксисом инструментов RDS Cli. Это означает, что когда я иду изменить привилегии, я получаю следующую ошибку:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"
я знаю, что это должна быть проблема с цитатой или двойным тире, но ни один из этих типов изменений пока не работает, тьфу!-f
опция не устранит ошибки, а просто позволит обработать не вызывающие нарушения инструкции SQL в файле. Из того, что я прочитал, RDS подавляется хранимыми процедурами в файле дампа. Попробуйте создать файл дампа без процедур хранения и посмотрите, нормально ли он загружается:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
-f
опцией. Второй этап может заключаться в том, чтобы сбрасывать только подпрограммы / stred proc и т. Д. По отдельностиисточник
Проблема с триггерами и хранимыми процедурами в файле дампа заключается в том, что эти определения включают пользователя, которым должна быть создана хранимая процедура, DEFINER. Пользователь, скорее всего, не существует в RDS, поэтому возникает ошибка. Чтобы иметь возможность загрузить файл дампа, вы можете удалить DEFINER с помощью sed или Perl и создать хранимую процедуру / триггер с пользователем, выполняющим импорт.
Теперь вы сможете загрузить исправленный файл дампа.
Как сказано в предыдущем ответе, вы должны установить параметр БД:
источник
OldDefiner
@localhost
/ DEFINER =NewDefiner
@localhost
/ g' ./TargetSqlFile.sqlДля меня в моем файле дампа было всего 2 команды, которые требовали SUPER привилегий:
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
Согласно документации mysqldump, вы можете отключить их с помощью
--set-gtid-purged=OFF
.Затем посмотрим на man mysqldump :
Поэтому я решил добавить
--set-gtid-purged=OFF
к своейmysqldump
команде, и тогда я смог успешно импортировать полученный файл дампа.источник
Как определено в документации AWS, триггеры, процедуры и функции по умолчанию отключены, поскольку двоичное ведение журнала включено по умолчанию. Отключение в основном делает вашу базу данных более безопасной, но если вы правильно защитили ее через сеть, это не имеет значения.
Выполните следующие действия, и ваша проблема будет решена https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
Также не стоит использовать определители при создании процедур. Простая команда sed может удалить его.
источник
Помимо редактирования
вам нужно удалить все DEFINER из файла дампа, проверьте следующую ссылку на команду SED, которая может помочь очистить файл дампа sql.
https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243
источник
После использования ответа arun-r, если проблема не решена, вам необходимо изменить файл дампа. Это просто.
В файле дампа вы найдете такие строки:
Вам необходимо заменить:
username_from_dumped_database
по вашему имени пользователя в базе данных rds.host_from_dumped_databse
по%
Не знаю почему, но у меня этот трюк сработал. Для этого достаточно простого текстового редактора.
источник