溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL數(shù)據(jù)庫(kù)中怎么快速導(dǎo)出導(dǎo)入大量數(shù)據(jù)

發(fā)布時(shí)間:2021-06-17 15:17:04 來(lái)源:億速云 閱讀:1885 作者:Leah 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章將為大家詳細(xì)講解有關(guān)MySQL數(shù)據(jù)庫(kù)中怎么快速導(dǎo)出導(dǎo)入大量數(shù)據(jù),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

MySQL遷移通常使用的有三種方法:

1、數(shù)據(jù)庫(kù)直接導(dǎo)出,拷貝文件到新服務(wù)器,在新服務(wù)器上導(dǎo)入。

2、使用第三方遷移工具。

3、數(shù)據(jù)文件和庫(kù)表結(jié)構(gòu)文件直接拷貝到新服務(wù)器,掛載到同樣配置的MySQL服務(wù)下。

第一種方案的優(yōu)點(diǎn):會(huì)重建數(shù)據(jù)文件,減少數(shù)據(jù)文件的占用空間,兼容性最好,導(dǎo)出導(dǎo)入很少發(fā)生問(wèn)題,需求靈活。缺點(diǎn):使用傳統(tǒng)導(dǎo)出導(dǎo)入時(shí)間占用長(zhǎng)。

第二種方案的優(yōu)點(diǎn):設(shè)置完成后傳輸無(wú)人值守,自動(dòng)完成。缺點(diǎn):不夠靈活,設(shè)置繁瑣,傳輸時(shí)間長(zhǎng),異常后很難從異常的位置繼續(xù)傳輸。

第三種方案的優(yōu)點(diǎn):時(shí)間占用短,文件可斷點(diǎn)傳輸,操作步驟少。缺點(diǎn):新舊服務(wù)器中MySQL版本及配置必須相同,可能引起未知問(wèn)題。

假如數(shù)據(jù)庫(kù)遷移是因?yàn)闃I(yè)務(wù)瓶頸或項(xiàng)目改造等需要變動(dòng)數(shù)據(jù)表結(jié)構(gòu)的(比如分區(qū)分表),我們便只能使用第一種方法了。

使用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE快速導(dǎo)出導(dǎo)入數(shù)據(jù)

LOAD DATA INFILE語(yǔ)句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。MySQL官方文檔也說(shuō)明了,該方法比一次性插入一條數(shù)據(jù)性能快20倍。

當(dāng)用戶(hù)一前一后地使用SELECT ... INTO OUTFILE LOAD DATA INFILE 將數(shù)據(jù)從一個(gè)數(shù)據(jù)庫(kù)寫(xiě)到一個(gè)文件中,然后再?gòu)奈募袑⑺x入數(shù)據(jù)庫(kù)中時(shí),兩個(gè)命令的字段和行處理選項(xiàng)必須匹配。否則,LOAD DATA INFILE 將不能正確地解釋文件內(nèi)容。

下面是一個(gè)項(xiàng)目的例子,MySQL由windows平臺(tái)遷移到Linux平臺(tái),數(shù)據(jù)總量12G

Windows平臺(tái)導(dǎo)出數(shù)據(jù):

tables.txt是保存數(shù)據(jù)表名稱(chēng)的文件,通過(guò)從文件中讀取數(shù)據(jù)表名稱(chēng),循環(huán)導(dǎo)出所有表:如果過(guò)程中攝及到分表,可根據(jù)分表規(guī)則修改導(dǎo)出的sql語(yǔ)句和批處理代碼,非常靈活。

@echo off & setlocal enabledelayedexpansion
for /f %%i in (tables.txt) do ( set table=%%i
 echo "dump table -- !table! --"
 mysql -uroot -p12345678 codetc_old -e "SELECT * INTO OUTFILE 'F:/MySQL/Uploads/!table!.txt' FIELDS TERMINATED BY ',' FROM !table!"
)
pause

Linux平臺(tái)導(dǎo)入數(shù)據(jù):

#!/bin/bash
while read line
do
    mysql -uroot -p12345678 codetc_new -e "LOAD DATA INFILE '/var/lib/mysql-files/$line.txt' INTO TABLE $line FIELDS TERMINATED BY ','"
done < tables.txt

關(guān)于MySQL數(shù)據(jù)庫(kù)中怎么快速導(dǎo)出導(dǎo)入大量數(shù)據(jù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI