超大数据快速导入MySQL
2017-11-27 17:22
591 查看
一.问题背景
由于论文实验需要,现有下面两个需求.1. 将1G的csv文件数据导入MySQL单表sample中,记录数2000w+;
2. 将上面的sample表中的数据迁移到远程数据库中.
二.解决方案
对于需求1,有如下解决方式.1. 使用Navicat 工具栏中’数据导入’功能;
2. 使用编写Python/Perl脚本导入(未实现).
3. 使用MySQL的LOAD DATA INFILE命令,语法如下.
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name [, partition_name] ...)] [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number {LINES | ROWS}] [(col_name_or_user_var [, col_name_or_user_var] ...)] [SET col_name={expr | DEFAULT}, [, col_name={expr | DEFAULT}] ...]
关于其中各参数的介绍见参考文献3[3]
对于需求2,有如下解决方式.
1. 使用FTP/SCP 或者WinSCP工具,将CSV文件压缩后发送到远程服务器,然后使用LOAD DATA INFILE 导入.
2. 使用 mysqldump[1];
3. 使用Navicat的数据传输.
三.实验环境
MySQL 5.6Windows 7 32bit
四.实验结果
对于需求1,由于数据量很大,导致使用方法1时,电脑卡死,放弃.使用LOAD DATA,本地不到10分钟可将数据全部导入.==注1:使用LOAD之前,需在MySQL中先创建目标表,建议添加一个自增ID列,方便统计记录数,字段顺序和CSV列的顺序保持一致.==
实验结果如图:
==注2: 最后一行类似(col1,col2,@col3,col4..)的语法是指定要插入的列,对于不想插入的列,用@col3表示.==
==注3:如果CSV文件列属性类型数据库中没有,就需要对该列进行处理(转换类型或者不插入这列)==
对于需求2,方法2和3耗时巨大,同样是LOAD DATA 最为高效.
图一为数据传输所花费时间:
图二为LOAD所花费时间:
五. 实验结论
LOAD DATA INFILE 数据导入功能是非常强大的,相对其他耗时最少.参考文献
Three methods to transfer a mysql database13.2.6 LOAD DATA INFILE Syntax
load的语法
相关文章推荐
- Windows平台下,将mdb文件快速向MySQL中导入数据的方法
- 如何在利用Navicte for Mysql 快速导入数据
- MySQL快速远程导入导出数据库数据
- 超大文本文件数据导入MYSQL
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
- 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL
- 算法:将table标识的树形结构文本数据快速导入Mysql邻接表
- CSDN 600万数据快速导入MYSQL
- MySQL 之 LOAD DATA INFILE 快速导入数据
- mysql数据向Redis快速导入
- 向mysql中快速导入数据
- Mysql 大量数据快速导入导出
- 使用MySQL Migration Toolkit快速导入Oracle数据
- Mysql 大量数据快速导入导出
- 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]
- Windows环境下Mysql如何快速导入或恢复表为innodb的数据
- 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL
- 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL
- 从Mysql将数据快速导入到redis中
- MYSQL快速导入本地数据