我是MySQL的新手,我对此知之甚少。
我面临的问题如下所述:
以前我的数据是将MyISAM作为MySQL引擎,过去大约需要15分钟才能在任何机器上导入。但是,当我将引擎更改为InnoDB时,需要花费大约90分钟才能在任何机器上导入。请建议我这样做。
答案 0 :(得分:11)
Innodb表对于并发插入更快。见Innodb Performance Optimization Basics
为获得最佳性能,您需要调整INNODB
文件中的my.cnf
引擎。
假设您有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服务器。
答案 1 :(得分:2)
@Omesh有一些很棒的提示&我认为这是我最新进口的4.5GB& 5.0GB SQL的3600万行成功。我想得到一个其他一些额外提示帮助的地方。
关注@Omesh MySQL配置建议。
接下来,查看您尝试导入的实际SQL文件。该
我们用来转储数据的工具在这之前添加了这些行
INSERT
声明:
/*!40000 ALTER TABLE `table_name` DISABLE KEYS */;
我做的是取消注释。它禁用主要检查 插入过程中的键,使其更快。如果您没有该行,则可以手动添加它:
ALTER TABLE `table_name` DISABLE KEYS;
如果这是一个正在使用的实时数据库,请小心。
在INSERT
语句之后,该工具也立即添加了这一行。删除注释以重新启用主键:
/*!40000 ALTER TABLE `table_name` ENABLE KEYS */;
同样,它应该是这样的:
ALTER TABLE `table_name` ENABLE KEYS;
在实际运行insert语句之前,请使用查询关闭autocommit
,unique_checks
和foreign_key_checks
:
set autocommit=0; set unique_checks=0; set foreign_key_checks=0;
现在运行导入:
source /path/to/your/file.sql
导入成功完成后,您将要提交,然后重新启用unique_checks
和foreign_key_checks
:
commit; set unique_checks=1; set foreign_key_checks=1;
您可能需要考虑进行导入的其他一些注意事项:
如果您正在使用虚拟机,则需要增加VM的可用资源(RAM,CPU核心数),直到导入完成为止
如果你正在使用物理机器,可以从另一台机器借一些RAM足够长的时间来完成导入
如果可能的话,使用2个不同的磁盘:1个专用于读取(SQL文件源)和1个专用于写入(DB或VM所在的位置)
希望这有助于其他人!