将sql转储恢复到RDS的最快方法
Posted
技术标签:
【中文标题】将sql转储恢复到RDS的最快方法【英文标题】:Fastest way to restore sql dump to RDS 【发布时间】:2015-04-03 18:16:19 【问题描述】:我正在尝试将大型 *.sql 转储 (~4 GB) 还原到我在 RDS 上的一个数据库。上次尝试使用 Workbench 恢复它,整个过程完成大约需要 24 多个小时。
我想知道是否有更快的方法来做到这一点。请帮助并分享您的想法
编辑:顺便说一下,我的本地计算机上有我的 sql 转储。
目前我有两个选择:
-
点击此链接
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql.Procedural.Importing.NonRDSRepl.html(信心不足)
转储数据库并压缩它,然后将压缩转储上传到我的 EC2 实例之一,然后通过 SSH 连接到我的 EC2 实例并执行
mysql> source backup.sql;
我更喜欢第二种方法(只是因为我对此更有信心),因为它会缩短上传时间,因为整个转储是第一次上传、未压缩并最终恢复的。
【问题讨论】:
还要考虑更改一些变量,例如 max_allowed_packet,假设 amazon 允许您访问 cnf 【参考方案1】:我的建议是对大表进行逐表备份,并通过禁用索引来恢复它们。它可以快速插入记录(以两倍以上的速度)并在恢复完成后简单地启用索引。
恢复命令前:
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;
我希望这会奏效,谢谢。
【讨论】:
【参考方案2】:您对使用 EC2 中介的直觉是正确的,但我真的认为最有利于您的事情实际上是在 AWS 内部。我偶尔会执行类似的过程,将 6GB 数据库的内容从一个 RDS 数据库实例移动到另一个。
我的配置:
源数据库实例和目标数据库实例位于同一区域和可用区。两者都是 db.m3.large。 EC2 实例与数据库实例位于同一区域和可用区。 EC2 实例是compute optimized。 (我使用 c3.xlarge,但如果我要从头开始,我会推荐 c4 系列)。从这里开始,我只是使用 EC2 实例从源实例执行一个非常简单的 mysqldump,然后对目标实例执行一个非常简单的 mysqlrestore。
位于同一区域和可用区确实会产生很大的不同,因为它可以减少过程中的网络延迟。在这种情况下,数据传输也是free or near-free。您为 EC2 和 RDS 实例选择的实例类也很重要——如果您希望这是一个快速操作,您希望能够最大化 I/O。
如果您没有提供足够的资源,网络延迟和 CPU 等外部因素可能(并且根据我的经验)会阻碍操作。在我使用 db.m3.large 实例的示例中,MySQLDump 需要不到 5 分钟,而 MySQLRestore 需要大约 15 分钟。我之前曾尝试恢复到 db.m3.medium RDS 实例,但由于 CPU 出现瓶颈,恢复时间花了一个多小时——它无法跟上 EC2 实例的速度。当我从我的本地机器恢复时,在他们的网络之外导致整个过程需要 4 个多小时。
此 EC2 中介不需要 24/7 全天候可用。完成后将其关闭或终止。我只需要支付一个小时的 c3.xlarge 时间。另请记住,您可以临时向上/向下扩展 RDS 实例类以增加转储期间的可用资源。如果可以的话,试着让你的本地机器摆脱困境。
如果您对此策略感兴趣,AWS 自己已经提供了一些关于此事的documentation。
【讨论】:
谢谢,我最终使用了类似于您建议的方法。延迟方面,我认为这是最快的方法。唯一的瓶颈是我将 dump.sql 从我的本地电脑(在我的地方)传输到我的 EC2 实例。但是,一旦 dump.sql 在 EC2 上,它的点亮速度就会很快(我可能在这里夸大了一点)。【参考方案3】:Command 总是比 Workbench 快。 尝试使用此命令恢复您的数据库。
恢复:
mysql -u root -p YOUR_DB_NAME < D:\your\file\location\dump.sql
转储:
mysqldump -u root -p YOUR_DB_NAME > D:\your\file\location\dump.sql
【讨论】:
这会使上传过程更快吗?请参阅我的更新以获取更多详细信息。干杯。 -1 表示“命令总是比 Workbench 快”,我读为:“命令行总是比 MySQL Workbench 快”。这完全是错误的。 MySQL Workbench 的许多任务甚至使用命令行应用程序,那它怎么能慢呢? 您好,我知道“MySQL Workbench 甚至使用命令行”,但是我们当然可以直接使用它,那样总是更快。参考:thisTried and true, the command line will always be the most efficient - though not the most friendly way - to accomplish a database export/import.
以上是关于将sql转储恢复到RDS的最快方法的主要内容,如果未能解决你的问题,请参考以下文章