Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将sql转储恢复到RDS的最快方法_Mysql_Mysql Workbench_Mysqldump_Amazon Rds - Fatal编程技术网

Mysql 将sql转储恢复到RDS的最快方法

Mysql 将sql转储恢复到RDS的最快方法,mysql,mysql-workbench,mysqldump,amazon-rds,Mysql,Mysql Workbench,Mysqldump,Amazon Rds,我正在尝试将大型*.sql转储(~4 GB)恢复到RDS上的一个DB。上一次尝试使用Workbench进行恢复,整个过程大约需要24个多小时才能完成 我想知道是否有更快的方法来做到这一点。请帮助并分享你的想法 编辑:顺便说一下,我在本地计算机上有我的sql转储 目前我有两个选择: 点击这个链接 (信心不足) 转储数据库并压缩它,然后将压缩的转储文件上载到我的一个EC2实例,然后将SSH上载到我的EC2实例并执行以下操作 mysql>sourcebackup.sql 我更喜欢第二种方法(只是因为我

我正在尝试将大型*.sql转储(~4 GB)恢复到RDS上的一个DB。上一次尝试使用Workbench进行恢复,整个过程大约需要24个多小时才能完成

我想知道是否有更快的方法来做到这一点。请帮助并分享你的想法

编辑:顺便说一下,我在本地计算机上有我的sql转储

目前我有两个选择:

  • 点击这个链接 (信心不足)
  • 转储数据库并压缩它,然后将压缩的转储文件上载到我的一个EC2实例,然后将SSH上载到我的EC2实例并执行以下操作
    mysql>sourcebackup.sql

  • 我更喜欢第二种方法(只是因为我对此更有信心),因为它会缩短上传时间,因为整个转储文件都是首次上传、未压缩并最终恢复的。

    命令总是比Workbench快。 尝试使用此命令还原数据库

    要恢复:

    mysql-u root-p您的\u DB\u名称

    接受转储:


    mysqldump-u root-p您的\u DB\u NAME>D:\YOUR\file\location\dump.sql

    我的建议是对大型表进行表备份,并通过禁用索引来恢复它们。它可以快速插入记录(速度超过两倍),并在恢复完成后启用索引

    还原命令之前:

    ALTER TABLE `table_name` DISABLE KEYS;
    
    恢复完成后:

    ALTER TABLE `table_name` ENABLE KEYS;
    
    还要在文件顶部添加以下额外命令,以避免大量磁盘访问:

    SET FOREIGN_KEY_CHECKS = 0;
    SET UNIQUE_CHECKS = 0;
    SET AUTOCOMMIT = 0;
    
    并在末尾添加以下内容:

    SET UNIQUE_CHECKS = 1;
    SET FOREIGN_KEY_CHECKS = 1;
    COMMIT;
    

    我希望这会起作用,谢谢。

    您关于使用EC2中介的直觉是正确的,但我真的认为对您有好处的最大的事情实际上是在AWS内部。我偶尔会执行类似的过程,将6GB数据库的内容从一个RDS DB实例移动到另一个RDS DB实例

    我的配置:

    • 源数据库实例和目标数据库实例位于同一区域和可用性区域中。两者均为db.m3.大
    • EC2实例与DB实例位于相同的区域和可用性区域
    • EC2实例是。(我使用c3.xlarge,但如果我从头开始,我会推荐c4系列)
    从这里开始,我只使用EC2实例从源实例执行一个非常简单的mysqldump,然后从目标实例执行一个非常简单的mysqlrestore

    处于同一区域和可用性区域确实会产生很大的差异,因为这会减少过程中的网络延迟。数据传输也是在这种情况下进行的。为EC2和RDS实例选择的实例类也很重要——如果您希望这是一个快速操作,那么您希望能够最大化I/O

    如果您没有提供足够的资源,网络延迟和CPU等外部因素可能(而且以我的经验来看)会使操作陷入瓶颈。在我使用db.m3.large实例的示例中,MySQLDump不到5分钟,MySQLRestore大约需要15分钟。我以前尝试过恢复到db.m3.medium RDS实例,但由于CPU瓶颈,恢复时间花了一个多小时,无法跟上EC2实例。当我从本地机器恢复时,由于不在他们的网络中,整个过程需要4个多小时

    此EC2中介不需要全天候可用。完成后关闭或终止它。我只需要付一小时的c3.xl大时间。还请记住,您可以临时向上/向下扩展RDS实例类,以增加转储期间的可用资源。如果可以的话,试着让你的本地机器脱离这个等式


    如果您对这一策略感兴趣,AWS自己也提供了一些相关信息。

    这会使上传过程更快吗?请查看我的更新以了解更多详细信息。干杯。-1“命令总是比工作台快”,我读作:“命令行总是比MySQL工作台快”。这完全是错误的。对于许多任务,MySQL Workbench甚至使用命令行应用程序,那么它怎么会更慢呢?您好,我知道“MySQL Workbench甚至使用命令行”,但当然我们可以直接使用它,那么它将总是更快。参考:
    trued and true,命令行始终是完成数据库导出/导入的最有效的方法,尽管不是最友好的方法。
    还研究了更改一些变量,如max_allowed_packet,假设amazon允许您访问cnfThanks,我最终使用了与您建议的方法类似的方法。就延迟而言,我认为这是最快的方法。唯一的瓶颈是我将dump.sql从本地pc(在我家)传输到EC2实例。但是,一旦dump.sql出现在EC2上,它的亮度就会变快(这里我可能有点夸张)。