合理使用mysql中的load data infile匯入資料

來源:互聯網
上載者:User

基本文法:

load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name,   )]
 
load data infile語句從一個文字檔中以很高的速度讀入一個表中。使用這個命令之前,mysqld進程(服務)必須已經在運行。為了安全原因,當讀取位於伺服器上的文字檔時,檔案必須處於資料庫目錄或可被所有人讀取。另外,為了對伺服器上檔案使用load data infile,在伺服器主機上你必須有file的許可權。


把千萬級甚至億級的資料寫入mysql,實在是一件很讓人頭痛的事情。
load data local infile貌似是最快的方法了, 可是load一個億級的檔案,仍然需要數十分鐘。

如果有主從結構的話,在主伺服器上面load數十分鐘,檔案資料會寫入binary log,再傳輸到從伺服器,
然後從伺服器也需要數十分鐘來做load操作,如果從伺服器只有一個sql_thread來執行binary log,那麼在這數十分鐘內,
從伺服器就只能做這一個load操作,無法對後續的sql語句做出響應,導致主從之間的延遲有數十分鐘。

而且,如果load了20分鐘,www.111cn.net然後探索資料源有問題,需要取消load,那麼mysql至少還要20分鐘才能復原成功…
這個時候非常無奈。

所以有必要把這種大檔案拆分成若干個小檔案,然後分別load.

下面給出一些測試資料:

[root@yw-0-0 huarong]# wc -l cfi.txt
20894227 cfi.txt, 行數20M
有九個欄位,varchar(255),沒有key。
檔案大小  4,078,099,848 (3.8G),每行平均195位元組。
 
t1.sh 直接load,作用是預熱。
這個時間資料竟然丟失了...
 
innodb t1.sh 再次直接load
time mysql   test -e "load data local infile '/d01/huarong/cfi.txt' into table cfi"
[root@yw-0-0 huarong]# ./t1.sh
real    6m4.720s
user    0m0.492s
sys     0m2.213s
 
innodb t2.sh不寫binlog.
time mysql   test -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/d01/huarong/cfi.txt' into table cfi"
[root@yw-0-0 huarong]# ./t2.sh
real    5m3.964s
user    0m0.586s
sys     0m2.788s
 
innodb t3.sh fifo,每次load 1M行資料。
wget http://www.maatkit.org/get/mk-fifo-split
perl ./mk-fifo-split ./cfi.txt --fifo /tmp/cfi.fifo --lines 1000000
while [ -e /tmp/cfi.fifo ]; do
        time mysql   test -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/tmp/cfi.fifo' into table cfi"
   sleep 1;
done
 
real: 5m25.84s
user: 0m2.197s
sys: 0m11.244s
 
 
myisam: t2.sh不寫binlog
real    3m24.838s
user    0m0.626s
sys     0m2.939s

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.