tim*_*son 82 mysql grant amazon-ec2 amazon-web-services amazon-rds
我正在尝试将我的mysql数据库从Amazon EC2复制到RDS:
我成功地使用以下方法mysqldump将我的数据库添加到我的根文件夹中:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
Run Code Online (Sandbox Code Playgroud)
然后我尝试将此.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
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误消息:
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)
Run Code Online (Sandbox Code Playgroud)
我尝试过GRANT SUPER..多种方式,但是当我尝试这样做时,我也遇到了错误.打字mysql > FLUSH privileges;也不起作用.
我是一个mysql初学者,很抱歉这么简单的问题.思考?
aru*_*n-r 110
Ros*_* II 55
根据http://getasysadmin.com/2011/06/amazon-rds-super-privileges/,您需要log_bin_trust_function_creators在AWS控制台中设置为1 ,以便无误地加载转储文件.
如果要忽略这些错误,并加载转储文件的其余部分,可以使用以下-f选项:
mysql -f my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
Run Code Online (Sandbox Code Playgroud)
该-f会报告错误,但会继续处理转储文件的剩余部分.
小智 30
转储文件中触发器和存储过程的问题在于这些定义包括应由DEFINER创建存储过程的用户.用户很可能在RDS中不存在,因此会引发错误.为了能够加载转储文件,您可以使用sed或Perl删除DEFINER,并与正在执行导入的用户一起创建存储过程/触发器.
perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql
Run Code Online (Sandbox Code Playgroud)
现在您应该能够加载固定的转储文件
mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql
Run Code Online (Sandbox Code Playgroud)
如前面的回答所述,您应该设置数据库参数:
log_bin_trust_function_creators = 1
Run Code Online (Sandbox Code Playgroud)
Yep*_*_Me 24
对我来说,我的转储文件中只有 2 个命令需要 SUPER 权限:
SET @@GLOBAL.gtid_purgedSET @@SESSION.SQL_LOG_BIN根据mysqldump 文档,您可以使用--set-gtid-purged=OFF.
然后看man mysqldump:
如果打算仅使用转储服务器中的一些数据来部署新的复制从属服务器,请使用 ON。如果打算通过在拓扑内复制表来修复表,请使用 OFF。如果打算在不相交的复制拓扑之间复制表,并且将保持如此,请使用 OFF。
所以我决定添加--set-gtid-purged=OFF到我的mysqldump命令中,然后我可以成功导入生成的转储文件。
根据AWS文档中的定义,默认情况下禁用触发器,过程和功能,因为默认情况下启用了二进制日志记录。禁用基本上可以使您的数据库更安全,但是,如果您通过网络进行了适当的保护,那就没关系了。
请按照以下步骤操作,您的问题将得到解决 https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
同样,在创建过程时不应使用定义器。一个简单的sed命令可以将其删除。
除了编辑
log_bin_trust_function_creators = 1
您需要从转储文件中删除所有DEFINER,请检查以下链接以获取SED命令,该命令可帮助清除sql转储文件。
| 归档时间: |
|
| 查看次数: |
73451 次 |
| 最近记录: |