百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> ubuntu中mysql使用load data导入数据
分享文章到:

ubuntu中mysql使用load data导入数据

发布时间:01/15 来源: 浏览: 关键词:
本文章来给各位同学介绍一下关于ubuntu中mysql使用load data的方法,有需要了解的朋友可参考,希望此文章能让你对load data更了解。


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


然后查了一下load data语法


LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[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的时候指定要插入的字段名字。

示例的代码如下:

 代码如下
LOAD DATA INFILE '~/data.txt'  
INTO TABLE fb0505  
CHARACTER SET  gbk  
FIELDS TERMINATED BY 't' ENCLOSED BY '' ESCAPED BY ''
LINES TERMINATED BY 'n' STARTING BY '' 
(seller_id,fb_type,fb_date,item_url);

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

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有11人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板