(轉(zhuǎn)載)超大數(shù)據(jù)快速導(dǎo)入MySQL

版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/dingding_12345/article/details/78646484
————————————————
版權(quán)聲明:本文為CSDN博主「Deen12520」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dingding_12345/article/details/78646484
一.問(wèn)題背景
由于論文實(shí)驗(yàn)需要,現(xiàn)有下面兩個(gè)需求.

  1. 將1G的csv文件數(shù)據(jù)導(dǎo)入MySQL單表sample中,記錄數(shù)2000w+;
  2. 將上面的sample表中的數(shù)據(jù)遷移到遠(yuǎn)程數(shù)據(jù)庫(kù)中.

二.解決方案
對(duì)于需求1,有如下解決方式.

  1. 使用Navicat 工具欄中’數(shù)據(jù)導(dǎo)入’功能;
  2. 使用編寫Python/Perl腳本導(dǎo)入(未實(shí)現(xiàn)).
  3. 使用MySQL的LOAD DATA INFILE命令,語(yǔ)法如下.

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var
[, col_name_or_user_var] ...)]
[SET col_name={expr | DEFAULT},
[, col_name={expr | DEFAULT}] ...]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
關(guān)于其中各參數(shù)的介紹見(jiàn)參考文獻(xiàn)3[3]

對(duì)于需求2,有如下解決方式.

  1. 使用FTP/SCP 或者WinSCP工具,將CSV文件壓縮后發(fā)送到遠(yuǎn)程服務(wù)器,然后使用LOAD DATA INFILE 導(dǎo)入.
  2. 使用 mysqldump[1];
  3. 使用Navicat的數(shù)據(jù)傳輸.
    三.實(shí)驗(yàn)環(huán)境
    MySQL 5.6
    Windows 7 32bit
    四.實(shí)驗(yàn)結(jié)果
    對(duì)于需求1,由于數(shù)據(jù)量很大,導(dǎo)致使用方法1時(shí),電腦卡死,放棄.使用LOAD DATA,本地不到10分鐘可將數(shù)據(jù)全部導(dǎo)入.

==注1:使用LOAD之前,需在MySQL中先創(chuàng)建目標(biāo)表,建議添加一個(gè)自增ID列,方便統(tǒng)計(jì)記錄數(shù),字段順序和CSV列的順序保持一致.==

實(shí)驗(yàn)結(jié)果如圖:

20171127163809587.png

==注2: 最后一行類似(col1,col2,@col3,col4..)的語(yǔ)法是指定要插入的列,對(duì)于不想插入的列,用@col3表示.==

==注3:如果CSV文件列屬性類型數(shù)據(jù)庫(kù)中沒(méi)有,就需要對(duì)該列進(jìn)行處理(轉(zhuǎn)換類型或者不插入這列)==

對(duì)于需求2,方法2和3耗時(shí)巨大,同樣是LOAD DATA 最為高效.
圖一為數(shù)據(jù)傳輸所花費(fèi)時(shí)間:

五. 實(shí)驗(yàn)結(jié)論

LOAD DATA INFILE 數(shù)據(jù)導(dǎo)入功能是非常強(qiáng)大的,相對(duì)其他耗時(shí)最少.

參考文獻(xiàn)

  1. Three methods to transfer a mysql database
  2. 13.2.6 LOAD DATA INFILE Syntax
  3. load的語(yǔ)法

(僅供個(gè)人留存學(xué)習(xí)用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容