8

我正在尝试通过以下命令将 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>

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

4

5 回答 5

3

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

于 2009-11-20T07:45:29.490 回答
1

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

于 2009-11-20T07:37:14.407 回答
0

Bcp ? .................................. 等一下。不管怎样,这将是一些批量交易。你需要大块。您需要它来避免过度填充您的日志段空间。锁定计数限制。任何大于 100 万件的东西一次都太多了。因此,BCP 最著名的批量大小是 10,000 条记录!

于 2009-11-21T23:56:37.040 回答
0

我同意 RageZ 和 Sarfraz 的回答,但我有话要补充。

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

看看这个:

Mysql 数据库性能调优

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

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

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

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

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

我知道 95GB 是非常大的文本文件,但是……我认为您应该使用能够在最多 2-3 小时内完成此类简单操作的硬件。

于 2012-11-30T22:27:10.460 回答
0

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

于 2014-09-24T17:59:43.830 回答