MySQL / Amazon RDS错误:“您没有SUPER权限…”
我试图将我的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..
但当我尝试这样做的时候,我也遇到了错误。 inputmysql > FLUSH privileges;
也不起作用。
我是一个mysql初学者,所以很抱歉这样一个简单的问题。 思考?
根据http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ ,您需要在AWS控制台中将log_bin_trust_function_creators
设置为1,以无错地加载转储文件。
如果您想忽略这些错误,并加载转储文件的其余部分,则可以使用-f
选项:
mysql -f my_database -u my_username -p -h my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
-f
将报告错误,但会继续处理转储文件的其余部分。
- 打开RDS Web控制台。
- 打开“参数组”选项卡。
- 创build一个新的参数组。 在对话框中,select与您的MySQL数据库版本兼容的MySQL系列,给它一个名称并确认。 select刚创build的参数组并发出“编辑参数”。
- 查找参数“log_bin_trust_function_creators”并将其值设置为“1”。
- 保存更改。
- 打开“实例”选项卡。 展开您的MySQL实例并发出名为“修改”的“实例操作”。
- select刚创build的参数组并启用“立即应用”。
- 点击“继续”并确认更改。
- 再次打开“实例”选项卡。 展开您的MySQL实例并发出名为“修改”的“实例操作”。
- 不要忘记:打开“实例”选项卡。 展开您的MySQL实例并发出名为“Reboot”的“实例操作”。
转储文件中的触发器和存储过程的问题在于,这些定义包括应由DEFINER创build存储过程的用户。 用户很可能不存在于RDS中,因此会引发错误。 为了能够加载转储文件,您可以使用sed或Perl删除DEFINER,并与执行导入的用户创build存储过程/触发器。
perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql
现在你应该能够加载固定的转储文件
mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql
如前面的答案所述,您应该设置数据库参数:
log_bin_trust_function_creators = 1
根据AWS文档中的定义,触发器,过程和函数默认处于禁用状态,因为缺省情况下启用了二进制日志logging。 禁用基本上使你的数据库更安全,但如果你已经通过networking妥善保护,这将无所谓。
按照这些步骤操作,您的问题将得到解决https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
你也不应该在创build过程时使用定义者。 一个简单的sed命令可以删除它。
除了编辑
log_bin_trust_function_creators = 1
你需要从你的转储文件中删除所有的DEFINER ,检查下面的链接SED命令,可以帮助清理你的SQL转储文件。