关于使用load infile命令将大量数据加载到表中

时间:2012-05-25 06:20:53

标签: mysql

将逗号分隔的txt文件加载到表中时遇到问题。档案很大。其大小 2 GB 并包含 65列 34 Lac 行。我做了以下设置加载此文件:

  • Query-LOAD DATA LOCAL INFILE filename INTO TABLE tablename FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

在文件my.ini中,我添加了以下变量

  • [mysqld] max_allowed_packet=60M
  • [myisamchk] key_buffer_size=512M myisam_max_sort_file_size=3G

我是mysql的新手。任何人都可以帮我加载这个文件。当我运行以上查询时,我得到了以下结果4-5次。

Query OK,0 rows affected(25.09 sec)
Records:0 Deleted:0 Skipped:0 Warnings:0

4 个答案:

答案 0 :(得分:1)

使用外部ulil

mysqlimport --ignore-lines=1 --fields-optionally-enclosed-by="\"" --fields-terminated-by=, --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password YOUR_DATABASE tablename.txt

答案 1 :(得分:1)

尝试不使用LOCAL关键字, 如果这不能解决您的问题,请发布文本文件的第一行,以便我们可以查看是否所有行都被忽略,因为它们与参数中指定的模式不匹配。

更新1: 现在我看到你正在使用

中的'\ r \ n'终止符
LINES TERMINATED BY '\r\n'

您是否尝试修改此行以仅使用'\ n':

LINES TERMINATED BY '\n'

更新2: 尝试在LOAD DATA命令中指定表列;

LOAD DATA INFILE filename
INTO TABLE tablename
FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'(
`tableColumn1` , `tableColumn2`, ..., `tableColumn65`
)

文件和表的列数可能不匹配,或者文件列与表列的顺序不同。

答案 2 :(得分:0)

我自己找到了问题的答案。

1.I 使用gslipts 软件拆分我的文件,并相应地对每个新创建的文件进行更改。

2.之后我正确地打开了这些文件格式正确半小时,然后创建了csv文件每个分割(由gslipts创建的文件)和已启动加载数据命令

答案 3 :(得分:0)

当您的INFILE很大时,必须调整max_allowed_pa​​cket以在5.6的refman中为每个链接提供最大1G的容量。 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_packet  准备工作可以包括“会议”。 SET local_infile = 1;在LOAD DATA INFILE filename INTO TABLE tablename之前设置max_allowed_pa​​cket = 1073741824(可能需要更多选项)..... 文件名可能需要完整路径即。 C:\文件夹\子文件夹\ myfilename.ext

警告将.ini / .cfg中的max_allowed_pa​​cket更改为1G可能会在日常操作中导致意外的内存压力。在此会话期间使用会话变量来满足此1G要求。如果您没有可用于此目的的1G内存,则无论如何都无法成功。