通过加载数据infile将95 GB CSV文件上传到MySQL MyISAM表中:CSV引擎是另一种选择吗?

时间:2009-11-20 07:28:09

标签: mysql file-upload import mysql-management load-data-infile

我正在尝试通过以下命令将95 GB CSV文件上传到MySQL数据库(MySQL 5.1.36):

CREATE TABLE MOD13Q1 (
rid INT UNSIGNED NOT NULL AUTO_INCREMENT,
gid MEDIUMINT(6) UNSIGNED NOT NULL ,
yr SMALLINT(4) UNSIGNED NOT NULL ,
dyyr SMALLINT(4) UNSIGNED NOT NULL ,
ndvi DECIMAL(7,4) NOT NULL comment 'NA value is 9',
reliability TINYINT(4)  NOT NULL comment 'NA value is 9',
ndviquality1 TINYINT(1) NOT NULL ,
ndviquality2 TINYINT(1) NOT NULL ,
primary key (rid),
key(gid)
) ENGINE = MyISAM ;

LOAD DATA INFILE 'datafile.csv' INTO TABLE MOD13Q1 FIELDS TERMINATED by ',' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(gid, yr, dyyr, ndvi, reliability,
ndviquality1, ndviquality2
) ;

我目前正在通过DOS运行此脚本,但数据库没有响应。它适用于较小的CSV文件(1.5 GB)。它适用于这个文件大小吗?

您对如何更有效/更快地完成此操作有什么建议吗?将engine = CSV作为替代方案(索引未激活! - >因此查询可能会超级运行?)。

更新

感谢您的提示,它有效!

mysql> LOAD DATA INFILE 'E:\\AAJan\\data\\data.csv' INTO TABL
E MOD13Q1
    -> FIELDS TERMINATED by ','
    ->     LINES TERMINATED BY '\r\n'
    ->     IGNORE 1 LINES
    ->     (gid, yr, dyyr, ndvi, reliability,
    ->     ndviquality1, ndviquality2
    ->     ) ;
Query OK, -1923241485 rows affected (18 hours 28 min 51.26 sec)
Records: -1923241485  Deleted: 0  Skipped: 0  Warnings: 0

mysql>

希望这有助于其他人避免以数据块分割数据。

5 个答案:

答案 0 :(得分:3)

没有简单的方法,你必须将数据拆分成块然后导入......

答案 1 :(得分:1)

导入时应禁用所有约束。除此之外,我认为它应该正常工作,并注意到它需要一段时间,可能是几个小时。

答案 2 :(得分:0)

您可以尝试使用MySQLTuner - 用perl编写的高性能MySQL调优脚本,它可以帮助您进行MySQL配置并提出改进性能和稳定性的建议。

答案 3 :(得分:0)

Bcp? .................................. 等一下。无论如何,这将是一些批量交易无关紧要。你需要块。您需要它以避免过度填充您的日志段空间。锁定数限制。一次超过100万件的东西太多了。因此,BCP最着名的批量大小是10,000条记录!

答案 4 :(得分:0)

我同意RageZ和Sarfraz的回答,但我有一些补充。

<强> 1。增加数据库缓存并重新配置一些mysql选项可能有所帮助(RAM使用)。

看看这个:

Mysql Database Performance tuning

我认为您应该专注于write_bufferread_bufferquery_cache_size以及其他与RAM和I / O相关的选项。

<强> 2。您可能需要更快的存储设备。你现在在用什么?

对于像这样大的数据库 - 你应该使用带有快速和现代硬盘的RAID-5阵列。

也许你的配置对于日常任务来说已经足够了,但是备份和孤岛危机的情况呢?

像这样创建备份和恢复数据库将花费太多时间在机器上,简单的插入导入需要18个小时。

我知道95GB是真正的大文本文件,但是......我认为你应该使用能够在2-3小时内完成这样简单操作的硬件。