用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > mysql教程

ubuntu中mysql使用load data导入数据

时间:2015-01-23  来源:西部数据  作者:西部数据

刚装的ubuntu,装好mysql后想用load data infile命令导入数据到表中,产生下面错误”ERROR 29 (HY000):File ‘/home/bioinformation/Downloads/data.txt’ not found (Errcode: 13)”,

然后查了一下load data语法:

  1. LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'  
  2. [REPLACE | IGNORE]  
  3. INTO TABLE tbl_name  
  4. [FIELDS  
  5. [TERMINATED BY 'string']  
  6. [[OPTIONALLY] ENCLOSED BY 'char']  
  7. [ESCAPED BY 'char' ]  
  8. ]  
  9. [LINES  
  10. [STARTING BY 'string']  
  11. [TERMINATED BY 'string']  
  12. ]  
  13. [IGNORE number LINES]  
  14. [(col_name_or_user_var,...)]  
  15. [SET col_name = expr,...]] 

LOAD DATA INFILE 语句以很高的速度从一个文本文件中读取行到一个表中,文件名必须是一个文字字符串.

发现没有问题,这时我就众权限来入手了将mysql用户改为”root”后还是不行,后来上网查了一下,要么不知所云,要么是觉得方法太复杂,而是想,这个错误的意思是找不到文件,那把这个文件复制到mysql数据库所在的文件不就行了,在安装mysql的时候没有注意,不知道mysql安装在哪里,如是想与其自己找,不如让它自己告诉我,而是load时用了个相对路径,代码如下:

”load data infile ‘data.txt’ into table table_name”,

果然mysql报错时就显示了” Can’t get stat of ‘/var/lib/mysql/test/data.txt’ (Errcode: 2)”,而是用“/home/bioinformation/Downloads/data.txt”复制为“/var/lib/mysql/test/data.txt”,结果发现用户没有权限,果断用”sudo su”切换到root用户,OK后,再运行,代码如下:

”load data infile ‘data.txt”

果然成功了,显示“Query OK,……”,再将用户切换到正常用户就行了,现总结如下,很简单,先用root用户将用户复制到mysql数据库所在文件夹,运用相对路径“load data infile ‘data.txt’ into table table_name”就可以了.

如何提高mysql load data infile的速度

测试数据2.5G,共有数据9427567条,用的mysql的large服务器的配置.

load一次需要大概10分钟左右.

建的表用的是MYISAM,调整了几个session的参数值,代码如下:

SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;

SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;

运行结果如下:

Query OK, 9427567 rows affected, 1558 warnings (3 min 55.21 sec)

Records: 9427567 Deleted: 0 Skipped: 0 Warnings: 0

google到的还可以,代码如下:

set global KEY_BUFFER_SIZE=256217728;

alter table tablename disable keys;

如何load不同编码的数据

原来用的4.X的mysql,我是select INTO OUTFILE,只后用iconv,或者其他软件来做。可以参考这里,但是由于这次数据大,用ultraedit等软件打开都要半天,好在新版的mysql可以增加一个新的参数:CHARACTER SET gbk

我的文本数据是GBK的编码,数据表是utf8的,用这种方法测试成功.

如何load的时候只insert特定的列

比如表里面有比元数据多的列,可以在load的时候指定要插入的字段名字,示例的代码如下:

  1. LOAD DATA INFILE '~/data.txt'    
  2. INTO TABLE fb0505   --phpfensi.com 
  3. CHARACTER SET  gbk    
  4. FIELDS TERMINATED BY 't' ENCLOSED BY '' ESCAPED BY ''  
  5. LINES TERMINATED BY 'n' STARTING BY ''   
  6. (seller_id,fb_type,fb_date,item_url); 

其中表fb0505里面还有一列是id.

来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门