mongoexport和mongoimport是MongoDB客(ke)(ke)戶端自(zi)帶的備(bei)份(fen)恢復工具。您可以在本地設備(bei)或(huo)ECS中安裝MongoDB客(ke)(ke)戶端,通過mongoexport和mongoimport工具將自(zi)建(jian)MongoDB數(shu)據(ju)庫或(huo)其他云數(shu)據(ju)庫MongoDB遷移至天翼云DDS實例(li)。
要(yao)將(jiang)已有的MongoDB數(shu)(shu)據庫(ku)遷移到文檔數(shu)(shu)據庫(ku),需要(yao)先使用mongoexport工(gong)具對它做轉儲(chu)。再(zai)通過彈性云服務器或可訪問文檔數(shu)(shu)據庫(ku)的設備,使用mongoimport工(gong)具將(jiang)轉儲(chu)文件導入到文檔數(shu)(shu)據庫(ku)服務。
使用須知
- mongoexport和mongoimport工具僅支持全量數據遷移。為保障數據一致性,遷移操作開始前請停止源數據庫的相關業務,并停止數據寫入。
- 建議您盡量選擇在業務低峰期遷移數據,避免在遷移過程中對業務造成影響。
- 不支持遷移系統庫admin和local。
- 確保源庫中系統庫admin和local沒有創建業務集合,如果已經有業務集合,必須在遷移前將這些業務集合從admin和local庫中遷移出來。
- 導入數據之前,確保源端有必要的索引,即在遷移前刪除不需要的索引,創建好必要的索引。
- 如果選擇遷移分片集群,必須在目標庫創建好要分片的集合,并配置數據分片。同時,遷移前必須要創建好索引。
前提條件
準備(bei)彈性(xing)云服務器或可(ke)訪問(wen)文檔數據庫的設備(bei)。
? 通過內網連接文檔數據庫實例,需要創建并登錄彈性云服務器,請參見創建彈性云服務器和登錄彈性云服務器。
? 通過公網地址連接文(wen)檔數據庫實例,需具備以下條件(jian)。
為(wei)實(shi)例中的節點綁定(ding)公網地(di)址,保證本地(di)設備(bei)可以訪問(wen)文檔數據(ju)庫(ku)綁定(ding)的公網地(di)址。
在已準備的(de)彈性云服務(wu)器或可訪(fang)問(wen)文檔數據(ju)庫的(de)設備上,安(an)裝(zhuang)數據(ju)遷移工具(ju)。
安裝數據遷移工具,請參見如何安裝MongoDB客戶端。
說明MongoDB客戶(hu)端會自帶mongoexport和mongoimport工具。
導出源庫數據
步驟 1 登錄到已(yi)準備(bei)的彈性云服務(wu)器或可訪問源數據庫(ku)的設(she)備(bei)。
步(bu)驟 2 使用mongoexport,將(jiang)源數據庫轉儲至JSON文件。
此處以SSL連(lian)接(jie)方式為例(li)進行說(shuo)明(ming),如(ru)果(guo)選擇普通連(lian)接(jie)方式,去掉命令中對應的“--ssl --sslAllowInvalidCertificates”即可。
./mongoexport --host <DB_ADDRESS> -- port <DB_PORT> -- ssl --sslAllowInvalidCertificates --type json --authenticationDatabase <AUTH_DB > -u <DB_USER> --db < DB_NAME > --collection < DB_COLLECTION > --out < DB_PATH >
- DB_ADDRESS為數據庫地址。
- DB_PORT為數據庫端口。
- AUTH_DB為存儲DB_USER信息的數據庫,一般為admin。
- DB_USER為數據庫用戶。
- DB_NAME為要遷移的數據庫名稱。
- DB_COLLECTION為要遷移的數據庫集合。
- DB_PATH為存儲數據JSON文件所在的路徑。
出(chu)現如(ru)下提示時,輸入數據庫管理員對(dui)應(ying)的密(mi)碼(ma):
Enter password:
示例如下,命令執行(xing)完(wan)會生成“exportfile.json”文(wen)件:
./mongoexport --host 192.168.1.21 --port 8635 --ssl --sslAllowInvalidCertificates --type json --authenticationDatabase admin -u rwuser --db test02 --collection Test --out /tmp/mongodb/export/exportfile.json
步驟 3 查看導(dao)出結果。
輸出內容(rong)顯示如下,說明遷移(yi)成功。其中(zhong),“x”表示轉儲(chu)數據的記錄條(tiao)數。
exported x records
步驟 4 壓縮導出的JSON文(wen)件。
gzip exportfile.json
壓縮是為了(le)方便網(wang)絡傳輸,壓縮后生成“exportfile.json.gz”文件。
將數據導入至目標DDS
步驟 1 登錄到已準備的(de)彈性云服務器或可訪問文檔數據庫(ku)的(de)設備。
步驟 2 將要(yao)導入的(de)數據上(shang)傳(chuan)到彈性云服務器或(huo)可訪問文檔數據庫(ku)的(de)設備。
根據不同(tong)的平臺選擇相應的上傳方(fang)法(fa)。
- Linux下可參考命令:
scp <IDENTITY_FILE> <REMOTE_USER> @ <REMOTE_ADDRESS> :<REMOTE_DIR>
? IDENTITY_FILE為(wei)存儲(chu)“exportfile.json.gz”的文件目錄(lu),該文件目錄(lu)權(quan)限為(wei)600。
? REMOTE_USER為彈性云服務器的操作系統用戶。
? REMOTE_ADDRESS為彈(dan)性(xing)云服務(wu)器的主機地址(zhi)。
? REMOTE_DIR為將“exportfile.json.gz”上傳(chuan)到彈性云(yun)服務器的文件(jian)目(mu)錄(lu)。
- Windows平臺下,請使用傳輸工具上傳“exportfile.json.gz”至彈性云服務器。
步驟 3 解壓數據包(bao)。
gzip -d exportfile.json.gz
步(bu)驟 4 將轉(zhuan)儲文件(jian)導入到(dao)文檔數據庫。
此(ci)處以SSL連接(jie)方式(shi)為例進行說明,如果(guo)選擇普通連接(jie)方式(shi),去掉命(ming)令(ling)中(zhong)對應的“--ssl --sslAllowInvalidCertificates”即(ji)可。
./mongoimport --host < DB_ADDRESS > --port < DB_PORT > --ssl --sslAllowInvalidCertificates --type json --authenticationDatabase < AUTH_DB > -u < DB_USER > --db < DB_NAME > --collection < DB_COLLECTION > --file < DB_PATH >
- DB_ADDRESS為數據庫實例的IP地址。
- DB_PORT為數據庫端口。
- AUTH_DB為DB_USER進行權限驗證的數據庫,一般為admin。
- DB_USER為數據庫管理員帳號名。
- DB_NAME為要導入的數據庫。
- DB_COLLECTION為要導入的數據庫中的集合。
- DB_PATH為轉儲數據JSON文件所在的路徑。
出現(xian)如下(xia)提示時,輸入數據(ju)庫管(guan)理員對(dui)應的(de)密碼:
Enter password:
示例如下:
./mongoimport --host 192.168.1.21 --port 8635 --ssl --sslAllowInvalidCertificates --type json --authenticationDatabase admin -u rwuser --db test02 --collection Test --file /tmp/mongodb/export/exportfile.json
步(bu)驟(zou) 5 查看遷移結果。
輸出內容顯示(shi)(shi)如(ru)下,說明遷移成功(gong)。其(qi)中,“x”表示(shi)(shi)轉儲(chu)數據(ju)的記錄條數。
imported x records