這篇文章主要講解了“百萬(wàn)級(jí)MySQL的數(shù)據(jù)量怎么快速完成數(shù)據(jù)遷移”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“百萬(wàn)級(jí)MySQL的數(shù)據(jù)量怎么快速完成數(shù)據(jù)遷移”吧!
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)阿勒泰免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
mysqldump遷移
平常開(kāi)發(fā)中,我們比較經(jīng)常使用的數(shù)據(jù)備份遷移方式是用mysqldump工具導(dǎo)出一個(gè)sql文件,再在新數(shù)據(jù)庫(kù)中導(dǎo)入sql來(lái)完成數(shù)據(jù)遷移。試驗(yàn)發(fā)現(xiàn),通過(guò)mysqldump導(dǎo)出百萬(wàn)級(jí)量的數(shù)據(jù)庫(kù)成一個(gè)sql文件,大概耗時(shí)幾分鐘,導(dǎo)出的sql文件大小在1G左右,然后再把這個(gè)1G的sql文件通過(guò)scp命令復(fù)制到另一臺(tái)服務(wù)器,大概也需要耗時(shí)幾分鐘。在新服務(wù)器的數(shù)據(jù)庫(kù)中通過(guò)source命令來(lái)導(dǎo)入數(shù)據(jù),我跑了一晚上都沒(méi)有把數(shù)據(jù)導(dǎo)入進(jìn)來(lái),cpu跑滿。
腳本遷移
直接通過(guò)命令行操作數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的導(dǎo)出和導(dǎo)入是比較便捷的方式,但是數(shù)據(jù)量較大的情況下往往會(huì)比較耗時(shí),對(duì)服務(wù)器性能要求也比較高。如果對(duì)數(shù)據(jù)遷移時(shí)間要求不是很高,可以嘗試寫腳本來(lái)遷移數(shù)據(jù)。雖然沒(méi)有實(shí)際嘗試,但是我想過(guò)大概有兩種腳本方案。
第一種方式,在遷移目標(biāo)服務(wù)器跑一個(gè)遷移腳本,遠(yuǎn)程連接源數(shù)據(jù)服務(wù)器的數(shù)據(jù)庫(kù),通過(guò)設(shè)置查詢條件,分塊讀取源數(shù)據(jù),并在讀取完之后寫入目標(biāo)數(shù)據(jù)庫(kù)。這種遷移方式效率可能會(huì)比較低,數(shù)據(jù)導(dǎo)出和導(dǎo)入相當(dāng)于是一個(gè)同步的過(guò)程,需要等到讀取完了才能寫入。如果查詢條件設(shè)計(jì)得合理,也可以通過(guò)多線程的方式啟動(dòng)多個(gè)遷移腳本,達(dá)到并行遷移的效果。
第二種方式,可以結(jié)合redis搭建一個(gè)“生產(chǎn)+消費(fèi)”的遷移方案。源數(shù)據(jù)服務(wù)器可以作為數(shù)據(jù)生產(chǎn)者,在源數(shù)據(jù)服務(wù)器上跑一個(gè)多線程腳本,并行讀取數(shù)據(jù)庫(kù)里面的數(shù)據(jù),并把數(shù)據(jù)寫入到redis隊(duì)列。目標(biāo)服務(wù)器作為一個(gè)消費(fèi)者,在目標(biāo)服務(wù)器上也跑一個(gè)多線程腳本,遠(yuǎn)程連接redis,并行讀取redis隊(duì)列里面的數(shù)據(jù),并把讀取到的數(shù)據(jù)寫入到目標(biāo)數(shù)據(jù)庫(kù)。這種方式相對(duì)于第一種方式,是一種異步方案,數(shù)據(jù)導(dǎo)入和數(shù)據(jù)導(dǎo)出可以同時(shí)進(jìn)行,通過(guò)redis做數(shù)據(jù)的中轉(zhuǎn)站,效率會(huì)有較大的提升。關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,回復(fù)關(guān)鍵字2T,獲取最新架構(gòu)視頻
可以使用go語(yǔ)言來(lái)寫遷移腳本,利用其原生的并發(fā)特性,可以達(dá)到并行遷移數(shù)據(jù)的目的,提升遷移效率。
文件遷移
第一種遷移方案效率太低,第二種遷移方案編碼代價(jià)較高,通過(guò)對(duì)比和在網(wǎng)上找的資料分析,我最終選擇了通過(guò)mysql的select data into outfile file.txt、load data infile file.txt into table的命令,以導(dǎo)入導(dǎo)出文件的形式完成了百萬(wàn)級(jí)數(shù)據(jù)的遷移。
在源數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)文件
select * from dc_mp_fans into outfile '/data/fans.txt';
復(fù)制數(shù)據(jù)文件到目標(biāo)服務(wù)器
zip fans.zip /data/fans.txt scp fans.zip root@ip:/data/
在目標(biāo)數(shù)據(jù)庫(kù)導(dǎo)入文件
unzip /data/fans.zip load data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@d
按照這么幾個(gè)步驟操作,幾分鐘內(nèi)就完成了一個(gè)百萬(wàn)級(jí)數(shù)據(jù)表的跨服務(wù)器遷移工作。
mysql安全項(xiàng)設(shè)置
在mysql執(zhí)行l(wèi)oad data infile和into outfile命令都需要在mysql開(kāi)啟了secure_file_priv選項(xiàng), 可以通過(guò)show global variables like '%secure%';查看mysql是否開(kāi)啟了此選項(xiàng),默認(rèn)值Null標(biāo)識(shí)不允許執(zhí)行導(dǎo)入導(dǎo)出命令。通過(guò)vim /etc/my.cnf修改mysql配置項(xiàng),將secure_file_priv的值設(shè)置為空:
[mysqld] secure_file_priv=''
則可通過(guò)命令導(dǎo)入導(dǎo)出數(shù)據(jù)文件。
導(dǎo)入導(dǎo)出的數(shù)據(jù)表字段不對(duì)應(yīng)
上面示例的從源數(shù)據(jù)庫(kù)的dc_mp_fans表遷移數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫(kù)的wxa_fans表,兩個(gè)數(shù)據(jù)表的字段分別為:- dc_mp_fans
在導(dǎo)入數(shù)據(jù)的時(shí)候,可以通過(guò)設(shè)置字段名來(lái)匹配目標(biāo)字段的數(shù)據(jù),可以通過(guò)@dummy丟棄掉不需要的目標(biāo)字段數(shù)據(jù)。
感謝各位的閱讀,以上就是“百萬(wàn)級(jí)MySQL的數(shù)據(jù)量怎么快速完成數(shù)據(jù)遷移”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)百萬(wàn)級(jí)MySQL的數(shù)據(jù)量怎么快速完成數(shù)據(jù)遷移這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)頁(yè)題目:百萬(wàn)級(jí)MySQL的數(shù)據(jù)量怎么快速完成數(shù)據(jù)遷移
文章源于:http://sd-ha.com/article46/ihhshg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、軟件開(kāi)發(fā)、標(biāo)簽優(yōu)化、網(wǎng)站改版、網(wǎng)站策劃、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)