我正在尝试将大型* .sql转储(~4 GB)恢复到RDS上的某个数据库。上次尝试使用Workbench恢复它,整个过程完成大约需要24小时。
我想知道是否有更快的方法来做到这一点。请帮助并分享您的想法
编辑:顺便说一下,我在我的本地计算机上安装了sql dump。
目前我有两个选择:
mysql> source backup.sql;
我更喜欢第二种方法(仅仅因为我对此更有信心),并且它会固定上传时间,因为整个转储首次上传,未压缩并最终恢复。
答案 0 :(得分:3)
我的建议是对大表进行逐表备份,并通过禁用索引来恢复它们。其中快速插入记录(速度超过双倍速度)并在恢复完成后简单地启用索引。
恢复前命令:
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;
我希望这会有效,谢谢。
答案 1 :(得分:1)
您对使用EC2中介的直觉是正确的,但我认为最有利于您的事实上是在AWS内部。我偶尔会执行类似的过程将6GB数据库的内容从一个RDS数据库实例移动到另一个RDS数据库实例。
我的配置:
从这里开始,我只使用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中介不应该全天候提供。完成后将其关闭或终止。我只需支付一小时的c3.xlarge时间。另请记住,您可以临时扩展/缩小RDS实例类,以增加转储期间可用的资源。如果可以的话,尽量让你的本地机器脱离等式。
如果您对此策略感兴趣,AWS本身就此问题提供了一些documentation。
答案 2 :(得分:-3)
命令总是比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