大型SQL文件導(dǎo)入mysql方案

一. 場(chǎng)景

現(xiàn)有倆個(gè)體積較大的單表sql文件啄清,一個(gè)為8G,一個(gè)為4G,要在一天內(nèi)完整導(dǎo)入到阿里云的mysql中计露,需要同時(shí)蠻子時(shí)間和空間這倆種要求该押。

二. 思路

搜索了網(wǎng)上一堆的方案,總結(jié)了如下幾個(gè):
方案一:利用navicat遠(yuǎn)程導(dǎo)入
方案二:在阿里云ECS安裝一個(gè)mysql-client,用source方案導(dǎo)入
方案三:購(gòu)買阿里云DBMS高級(jí)版服務(wù),可以導(dǎo)入1G以內(nèi)ZIP壓縮包

三. 嘗試

折騰了許久的嘗試言蛇,終于總結(jié)了一下的經(jīng)驗(yàn):

3.1 嘗試navicat遠(yuǎn)程導(dǎo)入

操作簡(jiǎn)單,但是缺點(diǎn)很明顯:導(dǎo)入效率低严沥,嚴(yán)重占用本地的IO猜极,影響機(jī)器的正常工作,所以立馬放棄消玄。

3.2 嘗試source方案

3.2.1 實(shí)現(xiàn)步驟

STEP1 在測(cè)試環(huán)境的ECS上安裝一個(gè)mysql-client
STEP2 修改mysql中的max_allowed_packet參數(shù)為10G大小跟伏,net_buffer_length參數(shù)也根據(jù)需求適度調(diào)大。
STEP3 因?yàn)槭莻z個(gè)表翩瓜,寫(xiě)倆個(gè)腳本太麻煩了受扳,可以利用一個(gè)sql腳本聚合實(shí)現(xiàn),所以all.sql 的內(nèi)容可以如下

source /mydata/sql/a.sql;
source /mydata/sql/b.sql;

STEP4 為避免ssh連接掉線而導(dǎo)致執(zhí)行關(guān)閉兔跌,需要寫(xiě)一個(gè)shell腳本勘高,通過(guò)nohup后臺(tái)執(zhí)行。
myshell.sh腳本如下

mysql -h host  -uxxx -pxxx --database=user_database</mydata/sql/all.sql

STEP5 后臺(tái)執(zhí)行指令

nohup ./myshell.sh &

3.2.2 結(jié)果

測(cè)試速度相對(duì)快多了坟桅,但是由于第二天就需要华望,所以倆個(gè)表接近4000w行的數(shù)據(jù)絕對(duì)不能完成任務(wù),所以方案取消仅乓。但是不是否定該方案赖舟,其他場(chǎng)景肯定滿足。

3.3 嘗試DMBS

由于我們數(shù)據(jù)庫(kù)是阿里云的RDS夸楣,所以我們購(gòu)買了對(duì)應(yīng)的DBMS服務(wù)升級(jí)版宾抓,可以支持文件上傳導(dǎo)入(包含1G內(nèi)的ZIP)


DBMS功能

3.3.1 壓縮文件

壓縮單表SQL文件為單獨(dú)zip文件子漩,壓縮下來(lái)一個(gè)為0.9G,一個(gè)為1.2G

3.3.2 拆分文件

第一個(gè)sql文件上傳后執(zhí)行很順利石洗,但是第二個(gè)1.2G的zip包需要進(jìn)行拆分

3.3.3 拆分方案

1.拆分zip壓縮包

壓縮包拆分

拆分出來(lái)的文件幢泼,手動(dòng)改后綴后不滿足DBMS的文件規(guī)范,失敗~
2.高比例壓縮文件
利用7z高比例壓縮sql為7z后綴讲衫,壓縮后體積明顯小了缕棵,只有0.7G的體積,然后通過(guò)更改后綴為zip來(lái)上傳焦人。結(jié)果阿里云解析不出這樣的格式挥吵,失敗~
3.使用linux split 命令

split [--help][--version][-<行數(shù)>][-b <字節(jié)>][-C <字節(jié)>][-l <行數(shù)>][要切割的文件][輸出文件名]

補(bǔ)充說(shuō)明:
split可將文件切成較小的文件重父,預(yù)設(shè)每1000行會(huì)切成一個(gè)小文件花椭。
-<行數(shù)>或-l<行數(shù)>  指定每多少行就要切成一個(gè)小文件。
-b<字節(jié)>  指定每多少字就要切成一個(gè)小文件房午。支持單位:m,k
-C<字節(jié)>  與-b參數(shù)類似矿辽,但切割時(shí)盡量維持每行的完整性。

雖然linux可以根據(jù)行拆分文件(這也是阿里云工單提供的解決方案)郭厌,但是這個(gè)操作上傳上去拆分袋倔,在下載下來(lái)上傳到DBMS,文件體積這么大折柠,來(lái)來(lái)回回一天過(guò)去了宾娜,所以放棄~
4.拆分單表sql文件為多份
網(wǎng)上有個(gè)SQLDumpSplitter的工具可以拆分表為多份,但是搜索記錄中和文章中都是推薦SQLDumpSplitter2的版本扇售,版本太老了前塔,體積較大的sql完全不支持,失敗~
但是承冰!我在SQLDumpSplitter2里面看到了軟件的官網(wǎng)华弓,發(fā)現(xiàn)官網(wǎng)有SQLDumpSplitter3版本,不抱希望的嘗試了一下困乒,居然支持大體積文件寂屏。成功了!D嚷А迁霎!
附帶下載鏈接:https://philiplb.de/sqldumpsplitter3/ 太值得推廣了。

SQLDumpSplitter3

拆分結(jié)果

剩下就是按序上傳對(duì)應(yīng)文件即可完成百宇,不得不得夸阿里云這方面做得真的好考廉!
多任務(wù)執(zhí)行

執(zhí)行效率上面來(lái)說(shuō),也是可圈可點(diǎn)的:
切片入庫(kù)的效率

四. 總結(jié)

今天針對(duì)這個(gè)需求恳谎,我首先查詢了網(wǎng)上的大體方案芝此,然后挑選了幾個(gè)可執(zhí)行的方案進(jìn)行測(cè)試憋肖。排除了多個(gè)方案的情況下,采用了第三方的解決方案來(lái)完成這個(gè)問(wèn)題婚苹。在阿里云DBMS的支持下岸更,我們又嘗試了多種文件的切割方案,最后通過(guò)SQLDumpSplitter3+DBMS來(lái)實(shí)現(xiàn)了膊升,并且效率可觀怎炊。過(guò)程中也發(fā)現(xiàn),常用的client-source方案可以滿足自建mysql+效率要求不是極致的場(chǎng)景廓译。
綜上评肆,對(duì)于大型sql,最好的方案也是先切割(確保順序性)非区,然后利用一些更高效率的軟件執(zhí)行來(lái)實(shí)現(xiàn)最終結(jié)果瓜挽,也需要根據(jù)時(shí)間空間場(chǎng)景靈活選用方案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末征绸,一起剝皮案震驚了整個(gè)濱河市久橙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌管怠,老刑警劉巖淆衷,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渤弛,居然都是意外死亡祝拯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門她肯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)佳头,“玉大人,你說(shuō)我怎么就攤上這事辕宏⌒笪” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瑞筐,是天一觀的道長(zhǎng)凄鼻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)聚假,這世上最難降的妖魔是什么块蚌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮膘格,結(jié)果婚禮上峭范,老公的妹妹穿的比我還像新娘。我一直安慰自己瘪贱,他們只是感情好纱控,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辆毡。 她就那樣靜靜地躺著,像睡著了一般甜害。 火紅的嫁衣襯著肌膚如雪舶掖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天尔店,我揣著相機(jī)與錄音眨攘,去河邊找鬼嚣州。 笑死鲫售,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的该肴。 我是一名探鬼主播情竹,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沙庐!你這毒婦竟也來(lái)了鲤妥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拱雏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后底扳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铸抑,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年衷模,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹊汛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阱冶,死狀恐怖刁憋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情木蹬,我是刑警寧澤至耻,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站镊叁,受9級(jí)特大地震影響尘颓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晦譬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一疤苹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敛腌,春花似錦卧土、人聲如沸惫皱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逸吵。三九已至,卻和暖如春缝裁,著一層夾襖步出監(jiān)牢的瞬間扫皱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工捷绑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韩脑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓粹污,卻偏偏與公主長(zhǎng)得像段多,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壮吩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容