我试图我的MySQL数据库从亚马逊EC2复制到RDS:
我successfuly做了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初学者对于这样一个简单的问题,很抱歉。 思考?
每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
会报告错误,但会继续处理转储文件的剩余部分。
在转储文件触发器和存储过程的问题是,这些定义包括谁该存储过程应,定义者可以创建用户。 用户很可能不会在RDS存在,所以一个错误,然后提高。 为了能够加载转储文件可以删除使用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
作为AWS文档中定义触发器,过程,因为二进制日志功能是默认启用的功能默认情况下禁用。 禁用基本上使得你的数据库更安全,但如果你已经正确地通过网络安全都不会有问题。
按照这些步骤,您的问题将https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
还创建过程时,你不应该使用定义者。 一个简单的sed命令可以将其删除。
除了编辑
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
对于我来说,在这需要超级特权我的转储文件只有2个命令:
-
SET @@GLOBAL.gtid_purged
-
SET @@SESSION.SQL_LOG_BIN
按照mysqldump的文档 ,你可以禁用这些--set-gtid-purged=OFF
。
然后看着男人的mysqldump :
使用ON如果目的是部署只使用了一些来自倾倒服务器的数据的新的复制奴隶。 使用OFF如果意图是拓扑中复制来修复表。 使用OFF如果意图是复制不相交的,今后仍将如此复制拓扑之间的表。
所以,我决定增加--set-gtid-purged=OFF
到我mysqldump
命令,然后我可以成功地导入生成的转储文件。