萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> ubuntu中mysql使用load data導入數據

ubuntu中mysql使用load data導入數據

本文章來給各位同學介紹一下關於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。

copyright © 萬盛學電腦網 all rights reserved