mongodump和mongorestore是MongoDB客戶(hu)端自帶的備份恢(hui)復工(gong)具(ju)。您可以(yi)在本地(di)設備或ECS中安裝MongoDB客戶(hu)端,通過mongodump和mongorestore工(gong)具(ju)將自建MongoDB數(shu)據(ju)庫或其他云數(shu)據(ju)庫MongoDB遷(qian)移至天(tian)翼云DDS實例。
使用須知
- mongodump和mongorestore工具僅支持全量數據遷移。為保障數據一致性,遷移操作開始前請停止源數據庫的相關業務,并停止數據寫入。
- 建議您盡量選擇在業務低峰期遷移數據,避免在遷移過程中對業務造成影響。
- 不支持遷移系統庫admin和local。
- 確保源庫中系統庫admin和local沒有創建業務集合,如果已經有業務集合,必須在遷移前將這些業務集合從admin和local庫中遷移出來。
- 導入數據之前,確保源端有必要的索引,即在遷移前刪除不需要的索引,創建好必要的索引。
- 如果選擇遷移分片集群,必須在目標庫創建好要分片的集合,并配置數據分片。同時,遷移前必須要創建好索引。
- 如果使用mongodump工具備份失敗(示例:備份進度至97%時報錯),建議您嘗試增大虛擬機磁盤空間,預留部分冗余空間,再重新執行備份。
- 客戶側使用的是rwuser帳號,僅支持操作客戶業務庫表。所以,在使用時建議指定庫和表,僅對業務數據執行導入導出。不指定庫表,全量進行導入導出,可能會遇到權限不足的問題。
前提條件
準備彈性云服務器或可(ke)訪問(wen)DDS的(de)設備。
? 通過內網連接文檔數據庫實例,需要創建并登錄彈性云服務器,請參見創建彈性云服務器和登錄彈性云服務器。
? 通過公(gong)網地址連(lian)接(jie)文(wen)檔數據庫實(shi)例,需具備以(yi)下條件。
為實例(li)中(zhong)的(de)節點綁(bang)定公(gong)網(wang)(wang)地(di)址,保證本地(di)設備可以訪(fang)問文檔數據庫綁(bang)定的(de)公(gong)網(wang)(wang)地(di)址。
在已準備(bei)(bei)的(de)彈性(xing)云服(fu)務器或可訪問DDS的(de)設(she)備(bei)(bei)上,安(an)裝數據(ju)遷移工具。
安裝數據遷移工具,請參見如何安裝MongoDB客戶端。

說明
MongoDB客戶端會自帶mongodump和mongorestore工具。
MongoDB客戶端版本須(xu)和實例相匹(pi)配(pei),若版本不(bu)匹(pi)配(pei)則(ze)會有兼容性(xing)問題(ti)出(chu)現。
導出源庫數據
步驟 1 登(deng)錄到已(yi)準備的(de)彈性云(yun)服務器或可訪問源數據庫的(de)設備。
步(bu)驟(zou) 2 使(shi)用mongodump工具(ju),備(bei)份源數(shu)據(ju)庫中(zhong)的數(shu)據(ju)。
此處以SSL連接方式為例進行說明,如果選擇普通連接方式,去掉命令中對應的“--ssl --sslCAFile < FILE_PATH > --sslAllowInvalidCertificates ”即可。
./mongodump --host <DB_HOST> --port <DB_PORT> --authenticationDatabase <AUTH_DB> -u <DB_USER> --ssl --sslCAFile < FILE_PATH > --sslAllowInvalidCertificates --db < DB_NAME > --collection < DB_COLLECTION > --gzip --archive= < 備份文件的全目錄的文件名稱 >
表 參數說明
| 參數 | 說明 |
|---|---|
| <DB_HOST> | 數據庫地址。 |
| <DB_PORT> | 數據庫端口號。 |
| <DB_USER> | 數據庫用戶名。 |
| <AUTH_DB> | 存儲*<DB_USER>* 信息的數據庫,一般為admin。 |
| <FILE_PATH > | 存放根證書的路徑。 |
| <DB_NAME > | 需要遷移的數據庫名稱。 |
| <DB_COLLECTION > | 需要遷移的數據庫中的集合。 |
出現如下提(ti)示時,輸入數據庫管(guan)理員對應的(de)密碼:
Enter password:
示例如下,命令執行后,archive指定的文件即為最終的備份文件,如下命令以backup.tar.gz為例。
./mongodump --host 192.168. xx . xx ** --port 8635 --authenticationDatabase admin -u rwuser --ssl --sslCAFile/tmp/ca.crt --sslAllowInvalidCertificates --db** test --collection usertable --gzip --archive=backup.tar.gz
2019-03-04T18:42:10.687+0800 writing admin.system.users to
2019-03-04T18:42:10.688+0800 done dumping admin.system.users (1 document)
2019-03-04T18:42:10.688+0800 writing admin.system.roles to
2019-03-04T18:42:10.690+0800 done dumping admin.system.roles (0 documents)
2019-03-04T18:42:10.690+0800 writing admin.system.version to
2019-03-04T18:42:10.691+0800 done dumping admin.system.version (2 documents)
2019-03-04T18:42:10.691+0800 writing test.test_collection to
2019-03-04T18:42:10.691+0800 writing admin.system.profile to
2019-03-04T18:42:10.692+0800 done dumping admin.system.profile (4 documents)
2019-03-04T18:42:10.695+0800 done dumping test.test_collection (198 documents)
將數據導入至目標DDS
步驟 1 登錄到(dao)已(yi)準(zhun)備的(de)彈性(xing)云服務器或(huo)可訪問DDS的(de)設備。
步驟 2 將要導入的數據上(shang)傳到彈性云服務器(qi)或可(ke)訪問(wen)DDS的設(she)備。
根據不同(tong)的(de)平臺選擇相應(ying)的(de)上傳方法。
- Linux系統可參考如下命令:
scp -r <IDENTITY_DIR> <REMOTE_USER> @ <REMOTE_ADDRESS> :<REMOTE_DIR>
表 參數說明
| 參數 | 說明 |
|---|---|
| <IDENTITY_DIR> | 備份文件夾所在的目錄。 |
| <REMOTE_USER> | 步驟1中的彈性云服務器的操作系統用戶。 |
| <REMOTE_ADDRESS> | 步驟1中的彈性云服務器的主機地址。 |
| <REMOTE_DIR> | 待導入的目標彈性云服務器的文件目錄。 |
- Windows平臺下,請使用傳輸工具上傳備份目錄至彈性云服務器。
步驟 3 將備(bei)份的數據導入(ru)到DDS。
此處以SSL連接方式為例進行說明,如果選擇普通連接方式,去掉命令中對應的“--ssl --sslCAFile < FILE_PATH > --sslAllowInvalidCertificates ”即可。
./mongorestore --host <DB_HOST> --port <DB_PORT> --authenticationDatabase <AUTH_DB> -u <DB_USER> --ssl --sslCAFile < FILE_PATH > --sslAllowInvalidCertificates --db < DB_NAME > --collection < DB_COLLECTION > --gzip --archive= < 備份文件的全目錄的文件名稱 >
表 參數說明
| 參數 | 說明 |
|---|---|
| <DB_HOST> | DDS數據庫地址。 |
| <DB_PORT> | DDS數據庫端口號。 |
| <AUTH_DB> | <DB_USER>進行權限驗證的數據庫,一般為admin。 |
| <DB_USER> | 數據庫管理員帳號名,默認為rwuser。 |
| <FILE_PATH > | 存放根證書的路徑。 |
| <DB_NAME > | 需要遷移的數據庫名稱。 |
| <DB_COLLECTION > | 需要遷移的數據庫中的集合。 |
出(chu)現(xian)如下提示時,輸入數據庫管理員對應的密碼:
Enter password:
示例如下:
./mongorestore --host 192.168. xx.xx --port 8635 --authenticationDatabase admin -u rwuser --ssl --sslCAFile/tmp/ca.crt --sslAllowInvalidCertificates --db test --collection usertable --gzip --archive=backup.tar.gz
2019-03-05T14:19:43.240+0800 preparing collections to restore from
2019-03-05T14:19:43.243+0800 reading metadata for test.test_collection from dump/test/test_collection.metadata.json
2019-03-05T14:19:43.263+0800 restoring test.test_collection from dump/test/test_collection.bson
2019-03-05T14:19:43.271+0800 restoring indexes for collection test.test_collection from metadata
2019-03-05T14:19:43.273+0800 finished restoring test.test_collection (198 documents)
2019-03-05T14:19:43.273+0800 restoring users from dump/admin/system.users.bson
2019-03-05T14:19:43.305+0800 roles file 'dump/admin/system.roles.bson' is empty; skipping roles restoration
2019-03-05T14:19:43.305+0800 restoring roles from dump/admin/system.roles.bson
2019-03-05T14:19:43.333+0800 done
相關問題
在執行mongodump和mongorestore操作時(shi),會對整(zheng)個(ge)實例進行備份恢復(fu),此(ci)時(shi)會出現權限驗證失敗。
- 問題原因
因(yin)為rwuser賬(zhang)戶(hu)對實例(li)上的(de)admin庫和config庫權限(xian)受限(xian),所以會(hui)出現權限(xian)驗(yan)證失敗。
- 解決方案:
明確指定用戶業(ye)務相關庫表,即可正常操作。