繁体   English   中英

如何像MyISAM一样快速地将数据导入InnoDB表

[英]How to import data into InnoDB tables as fast as MyISAM

我是MySQL的新手,我对它知之甚少。

我面临的问题如下所述:

以前我的数据有MyISAM作为它的MySQL引擎,过去需要大约15分钟才能在任何机器上导入。 但是,当我将引擎更改为InnoDB时,需要花费大约90分钟才能在任何机器上导入。 请建议我同样的。

对于并发插入,Innodb表更快。 请参阅Innodb性能优化基础知识

为获得最佳性能,您需要在my.cnf文件中调整INNODB引擎。

假设,如果您有4GB RAM尝试将my.cnf文件配置为:

#Innodb
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 512M
innodb_log_file_size = 1G
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 30
innodb_file_per_table=1
innodb_file_format=barracuda
innodb_strict_mode=1
innodb_autoinc_lock_mode = 0

然后重启MySQL服务器。

@Omesh有一些很棒的提示,我认为这是我最新导入的4.5GB和5.0GB SQL的3600万行成功的部分原因。 我想得到一个其他一些额外提示有帮助的地方。

  1. 关注@Omesh MySQL配置建议。

  2. 接下来,查看您尝试导入的实际SQL文件。 我们用于转储数据的工具在INSERT语句之前添加了这些行:

    /*!40000 ALTER TABLE `table_name` DISABLE KEYS */;

    我所做的是取消注释。 它在插入期间禁用主键检查,使其更快。 如果您没有该行,则可以手动添加它:

    ALTER TABLE `table_name` DISABLE KEYS;

    如果这是一个正在使用的实时数据库,请小心使用。

  3. INSERT语句之后,该工具立即添加了该行。 删除注释以重新启用主键:

    /*!40000 ALTER TABLE `table_name` ENABLE KEYS */;

    再次,它应该是这样的:

    ALTER TABLE `table_name` ENABLE KEYS;

  4. 在实际运行insert语句之前, unique_checks使用查询关闭autocommitunique_checksforeign_key_checks

    set autocommit=0; set unique_checks=0; set foreign_key_checks=0;

  5. 现在运行你的导入:

    source /path/to/your/file.sql

  6. 导入成功完成后,您将要提交然后重新启用unique_checksforeign_key_checks

    commit; set unique_checks=1; set foreign_key_checks=1;

您可能需要考虑的进口的其他一些注意事项是:

  • 如果您正在使用虚拟机,请为VM启动可用资源(RAM,CPU核心数),直到导入完成为止

  • 如果您使用的是物理机,可以从另一台机器借用一些RAM足够长的时间来完成导入

  • 如果可能的话,使用2个不同的磁盘:1个专用于读取(SQL文件源)和1个专用于写入(DB或VM所在的位置)

希望这有助于其他人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM