我通过MySQL控制台导入SQL的速度相当慢,而且,随着我们的SQL文件每天都在增加,我想知道是否有更快的方法可以更快地导入SQL文件。
不能选择更改为Oracle或其他系统,配置必须保持不变。
目前SQL文件是:1.5 GB。 我正在WAMP使用Apache 2.2.14,PHP 5.2.11和MySQL 5.1.41。
也许问题出在这里,导入是通过简单的方式完成的:
mysql -u username -p dbname < sqlfilename.sql
有什么建议吗?
答案 0 :(得分:5)
在导入期间启用索引会降低服务器的爬网速度。 ALTER TABLE
表名DISABLE KEYS
;并且在导入之前和之后使用..ENABLE KEYS
将提高导入速度,但是需要一些时间来重新创建索引,因此它可能不会是一个很大的速度增益。
此外,使用myisam表(与带有参照完整性选项的innodb相比)通常可以提供更好的性能,因为不涉及参考完整性开销。
就个人而言,我不使用mysql控制台的import语句,而是使用mysql -uUSER -pPASS DBNAME < file.sql
导入sql文件,对我来说效果很好。
希望它有所帮助。
答案 1 :(得分:5)
试试这些http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
这可能是一个自动提交问题,请关闭然后查看发生的事情。
SET autocommit=0 ; source <your dump file> ; COMMIT ;
答案 2 :(得分:2)
关闭自动提交是Bulk Data Loading for InnoDB Tables中为加速MySQL恢复操作而提出的一系列建议中的第一个。
您可以在恢复时手动关闭自动提交,而不是以包含所有必要语句的方式将MySQL数据转储到SQL文件中。
mysqldump的命令行参数是--no-autocommit
。您还可以考虑添加--opt
,它设置其他参数的组合以加速恢复操作。
以下是我使用它时包含--no-autocommit
和--opt
的完整mysqldump命令行的示例:
mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names MyDbName > dump.sql
有关这些参数的详细信息,请参阅reference of mysqldump
答案 3 :(得分:0)
我不确定这是否能解决你的问题,因为我不确定瓶颈在哪里......但是,我对免费Toad for MySQL工具作为替代MySQL的印象非常深刻管理控制台。它有很棒的导入工具,通常比标准的MySQL管理控制台好一些IMO。