导入时出现MySQL / Amazon RDS错误

前端之家收集整理的这篇文章主要介绍了导入时出现MySQL / Amazon RDS错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

MysqLdump -h hostname -u username -ppassword --all-databases > dump.sql

现在当我尝试将数据上传到我的新实例时,我收到以下错误

MysqL -h hostname -u username -ppassword < dump.sql`
ERROR 1044 (42000) at line 2245: Access denied for user 'staging'@'%' to database 'MysqL'

我只是使用数据库快照来完成此任务,但我的实例尺寸较小.

作为一个完整性检查,我尝试将数据转储到原始实例,但得到了相同的错误.有人可以告诉我应该在这做什么吗?谢谢!

最佳答案
您可能需要单独执行数据库,或者至少从现有文件删除MysqL架构(可能使用grep查找USE数据库的行数;语句然后sed以删除麻烦的部分,或者参见下文),然后生成一个转储文件,该文件不会与MysqL模式中的表结构或专有RDS触发器一起使用.

我没有尝试将完整的MysqL架构恢复到RDS实例上,但我当然可以看到RDS中的自定义和缺少SUPER权限会出现什么问题…但是看起来MysqLdump上的这些选项应该可以帮到你至少关闭.

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”…但是当它在同一行上看到带有`MysqL`的USE或CREATE DATABASE语句并关闭它时切换输出再次下次这样的声明发生时没有`MysqL`.如果您的转储文件中还包含DROP DATABASE语句,或者您可以使用–skip-add-drop-database生成新的转储文件,则需要对其进行修改.

通过这种方式运行现有的转储文件本质上应该只从该文件删除MysqL架构,允许您先手动还原它,然后让其余的数据库数据更顺畅地流动.

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

猜你在找的MySQL相关文章