Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
有一个带有索引的mysqldump。如何通过禁用它们来导入它?_Mysql_Database_Mysqldump - Fatal编程技术网

有一个带有索引的mysqldump。如何通过禁用它们来导入它?

有一个带有索引的mysqldump。如何通过禁用它们来导入它?,mysql,database,mysqldump,Mysql,Database,Mysqldump,我正试图导入一个大型数据库,但因为有一个索引,导入数据库需要花费很长时间。我尝试将原始文件复制到另一台机器上,但由于某种原因,最大的表没有被读取,这给了我一个错误:无法读取文件:'tablename.MYD'。因此,我抛弃了我的旧数据库,但它使用了一个索引。我不能再做了,因为这需要很长时间 我正在尝试导入数据库,但不确定在没有索引的情况下如何导入。我认为在导入后添加索引会快得多。有人有什么建议吗?要禁用索引并从转储文件导入,请执行以下操作: alter table tablename禁用键 然后

我正试图导入一个大型数据库,但因为有一个索引,导入数据库需要花费很长时间。我尝试将原始文件复制到另一台机器上,但由于某种原因,最大的表没有被读取,这给了我一个错误:无法读取文件:'tablename.MYD'。因此,我抛弃了我的旧数据库,但它使用了一个索引。我不能再做了,因为这需要很长时间


我正在尝试导入数据库,但不确定在没有索引的情况下如何导入。我认为在导入后添加索引会快得多。有人有什么建议吗?

要禁用索引并从转储文件导入,请执行以下操作:

alter table tablename禁用键

然后当导入完成时:

alter table tablename启用键

尽管以您提到的方式复制文件应该是可行的。您只是有一个权限错误。在外壳上,请执行以下操作:

chown mysql.mysql tablename.*然后重新启动数据库。使用该命令修复问题时,请确保您位于表所在的文件夹中


编辑:阐明应在何处使用命令禁用索引并从转储文件导入:

alter table tablename禁用键

然后当导入完成时:

alter table tablename启用键

尽管以您提到的方式复制文件应该是可行的。您只是有一个权限错误。在外壳上,请执行以下操作:

chown mysql.mysql tablename.*然后重新启动数据库。使用该命令修复问题时,请确保您位于表所在的文件夹中


编辑:明确了应该在何处使用命令默认情况下,mysqldump会生成SQL,在批量导入期间禁用索引,然后应用它们。看起来是这样的:

/*!40000 ALTER TABLE `my_table` DISABLE KEYS */;
INSERT INTO `my_table` VALUES (...), (...);
/*!40000 ALTER TABLE `my_table` ENABLE KEYS */;

默认情况下,mysqldump生成SQL,该SQL在大规模导入期间禁用索引,然后应用它们。看起来是这样的:

/*!40000 ALTER TABLE `my_table` DISABLE KEYS */;
INSERT INTO `my_table` VALUES (...), (...);
/*!40000 ALTER TABLE `my_table` ENABLE KEYS */;

您好,很抱歉这么晚才发表评论。但我和OP有同样的问题,在问之前我一直在寻找解决方案。我有一个问题,您的解决方案是否会影响以后的查询速度?谢谢。当您启用键时,将重建索引。所以不,未来的查询速度不应该受到影响。那么索引重建需要时间,对吗?我的意思是唯一的区别是,在插入占用太多时间的地方,索引重建占用的时间可能会少一些。抱歉,问题太多。在导入时禁用索引的原因是mysql不会在每次插入后重建索引。如果你正在做大量的插入,这将是非常缓慢的。禁用和启用可确保它们只发生一次。正如@JohnDouthat在他的回答中指出的那样,禁用和启用是mysqldump的默认设置。感谢您的解释,我在AWS上有4个表,共1.5亿行,每个表有11个索引。RDS除了mysqldump之外,不能做任何事情。您好,很抱歉这么晚才发表评论。但我和OP有同样的问题,在问之前我一直在寻找解决方案。我有一个问题,您的解决方案是否会影响以后的查询速度?谢谢。当您启用键时,将重建索引。所以不,未来的查询速度不应该受到影响。那么索引重建需要时间,对吗?我的意思是唯一的区别是,在插入占用太多时间的地方,索引重建占用的时间可能会少一些。抱歉,问题太多。在导入时禁用索引的原因是mysql不会在每次插入后重建索引。如果你正在做大量的插入,这将是非常缓慢的。禁用和启用可确保它们只发生一次。正如@JohnDouthat在他的回答中指出的那样,禁用和启用是mysqldump的默认设置。感谢您的解释,在AWS RDS上,我有4个1.5亿行的表,每个表有11个索引。除了mysqldump之外,RDS不能做任何事情。还有什么方法可以防止这种情况吗?为了防止这种情况,使用-skip disable key调用mysqldump是否有防止此情况发生的方法?要防止此情况发生,请使用-skip disable key调用mysqldump