我正在尝试通过以下命令将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>
希望这有助于其他人避免以数据块分割数据。
答案 0 :(得分:3)
没有简单的方法,你必须将数据拆分成块然后导入......
答案 1 :(得分:1)
导入时应禁用所有约束。除此之外,我认为它应该正常工作,并注意到它需要一段时间,可能是几个小时。
答案 2 :(得分:0)
Bcp? .................................. 等一下。无论如何,这将是一些批量交易无关紧要。你需要块。您需要它以避免过度填充您的日志段空间。锁定数限制。一次超过100万件的东西太多了。因此,BCP最着名的批量大小是10,000条记录!
答案 3 :(得分:0)
我同意RageZ和Sarfraz的回答,但我有一些补充。
<强> 1。增加数据库缓存并重新配置一些mysql选项可能有所帮助(RAM使用)。
看看这个:
Mysql Database Performance tuning
我认为您应该专注于write_buffer
,read_buffer
,query_cache_size
以及其他与RAM和I / O相关的选项。
<强> 2。您可能需要更快的存储设备。你现在在用什么?
对于像这样大的数据库 - 你应该使用带有快速和现代硬盘的RAID-5阵列。
也许你的配置对于日常任务来说已经足够了,但是备份和孤岛危机的情况呢?
像这样创建备份和恢复数据库将花费太多时间在机器上,简单的插入导入需要18个小时。
我知道95GB是真正的大文本文件,但是......我认为你应该使用能够在2-3小时内完成这样简单操作的硬件。
答案 4 :(得分:0)
您可以尝试使用MySQLTuner - 用perl编写的高性能MySQL调优脚本,它可以帮助您进行MySQL配置并提出改进性能和稳定性的建议。