首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL/Amazon导入错误

MySQL/Amazon导入错误
EN

Stack Overflow用户
提问于 2014-03-14 01:29:27
回答 3查看 2.3K关注 0票数 5

我正在尝试将所有数据库从一个500 to的RDS实例中转储到一个较小的实例(100 To)中。我保存了很多用户权限,所以我需要转储mysql表。

代码语言:javascript
复制
mysqldump -h hostname -u username -ppassword --all-databases > dump.sql

现在,当我试图将数据上传到我的新实例时,我会得到以下错误:

代码语言:javascript
复制
mysql -h hostname -u username -ppassword < dump.sql`
ERROR 1044 (42000) at line 2245: Access denied for user 'staging'@'%' to database 'mysql'

我只需要使用一个数据库快照来完成这个任务,但是我的实例的大小要小一些。

作为正常检查,我尝试将数据转储到原始实例中,但得到了相同的错误。有人能告诉我我在这里应该做什么吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-14 02:22:11

您可能需要单独执行数据库,或者至少从现有文件中删除mysql模式(可能需要使用grep查找USE database;语句的行数,然后使用sed来修剪麻烦的部分,或查看下面的内容),然后生成一个转储文件,该文件不会对表结构或MySQL模式中的专用RDS触发器进行猴子操作。

我没有尝试将完整的mysql模式还原到RDS实例上,但我可以肯定地看到,在RDS中的自定义和缺乏SUPER特权时,它会出错.但是看起来,这些mysqldump上的选项至少可以让您更接近。

代码语言:javascript
复制
mysqldump --no-create-info      # don't try to drop and recreate the mysql schema tables
          --skip-triggers       # RDS has proprietary triggers in the mysql schema
          --insert-ignore       # write INSERT IGNORE statements to ignore duplicates
          --databases mysql     # only one database, "mysql"
          --skip-lock-tables    # don't generate statements to LOCK TABLES/UNLOCK TABLES during restore
          --single-transaction  # to avoid locking up the source instance during the dump

如果这仍然太过咄咄逼人,那么您将只需要从需要保留其内容的特定表("user“和其他授予表)中转储行。

下面没有保修,但这是我收藏的。它是一条一行,上面写着"old_dumpfile.sql“和”new_dumpfile.sql“.但是,当它看到带有USECREATE DATABASE语句的mysql语句位于同一行时,就会关闭输出,并在下次在没有mysql的情况下再次打开该语句。如果转储文件中也包含DROP DATABASE语句,或者您可以使用--skip-add-drop-database生成一个新的dumpfile,则需要对其进行修改。

通过运行现有的转储文件,从本质上应该只删除该文件中的mysql模式,首先允许您轻松地手动还原它,然后让其余的数据库数据更顺畅地流动。

代码语言:javascript
复制
perl -pe 'if (/(^USE\s|^CREATE\sDATABASE.*\s)`mysql`/) { $x = 1; } elsif (/^USE\s`/ || /^CREATE\sDATABASE/) { $x = 0; }; $_ = "" if $x;' old_dumpfile.sql > new_dumpfile.sql
票数 2
EN

Stack Overflow用户

发布于 2014-03-14 07:04:10

我想你可以尝试使用工作台。这里有一个迁移函数,首先创建较小的实例(100 it ),然后使用该迁移特性从500 it迁移到100 it的实例,看看它是否有效。

票数 1
EN

Stack Overflow用户

发布于 2014-03-14 07:30:13

我有太多的访问被拒绝的问题与RDS MySQL。因此,在RDS上运行命令是我的出路:

代码语言:javascript
复制
GRANT ALL ON `%`.* to '<type_the_usernamne_here>'@'%';

我不确定这对你的情况是否有帮助。但对我来说,它一直是我的救世主。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22394444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档