剛裝的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的參數值
運行結果如下
代碼如下 復制代碼 Query OK, 9427567 rows affected, 1558 warnings (3 min 55.21 sec)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'其中表fb0505裡面還有一列是id。