MongoDB備份(mongoexport)與恢復(mongoimport)
1.備份恢復工具介紹:
- mongoexport/mongoimport
- mongodump/mongorestore(本文未涉及)
2.備份工具區別在哪裡?
2.1
- mongoexport/mongoimport 導入/導出的是JSON格式或者CSV格式
- mongodump/mongorestore 導入/導出的是BSON格式
2.2
JSON可讀性強但體積較大,BSON則是二進位文件,體積小但對人類幾乎沒有可讀性。
2.3
- 在一些mongodb版本之間,BSON格式可能會隨版本不同而有所不同,所以不同版本之間用mongodump/mongorestore可能不會成功,具體要看版本之間的兼容性。
- 當無法使用BSON進行跨版本的數據遷移的時候,使用JSON格式即mongoexport/mongoimport是一個可選項。
- 跨版本的mongodump/mongorestore個人並不推薦,實在要做請先檢查文檔看兩個版本是否兼容(大部分時候是的)
2.4
JSON雖然具有較好的跨版本通用性,但其只保留了數據部分,不保留索引,賬戶等其他基礎資訊。使用時應該注意。
2.5
- mongoexport不支援普通導出單個db的所有的collection
- mongodump支援普通導出單個db的所有的collection
3.應用場景總結:
mongoexport/mongoimport
1、異構平台遷移 mysql <—> mongodb
2、同平台,跨大版本:mongodb2.x —> mongodb3.x
mongodump/mongorestore
日常備份恢復時使用.
4.版本介紹
- 從MongoDB 4.4開始,mongoimport現已與MongoDB Server分開發布,並使用其自己的版本控制(初始版本為)100.0.0。
- 以前,mongoimport它與MongoDB Server一起發布,並使用了匹配的版本控制。
- 官方文檔://docs.mongodb.com/database-tools/mongoimport/
- 下載地址(4.4以上)://www.mongodb.com/try/download/database-tools?tck=docs_databasetools
- 遵循向下兼容原裝,即mongoimport版本100.2.1支援MongoDB Server4.4往下所有版本
5.導出工具mongoexport
- mongoexport工具可以把一個collection導出成JSON格式或CSV格式的文件。
- 可以通過參數指定導出的數據項,也可以根據指定的條件導出數據。
5.1 mongoexport關鍵參數如下所示:
mongoexport --help
查看幫助命令
- -h,–host :代表遠程連接的資料庫地址,默認連接本地Mongo資料庫;
- –port:代表遠程連接的資料庫的埠,默認連接的遠程埠27017;
- -u,–username:代表連接遠程資料庫的帳號,如果設置資料庫的認證,需要指定用戶帳號;
- -p,–password:代表連接資料庫的帳號對應的密碼;
- -d,–db:代表連接的資料庫;
- -c,–collection:代表連接資料庫中的集合;
- -f, –fields:代表集合中的欄位,可以根據設置選擇導出的欄位;
- –type:代表導出輸出的文件類型,包括csv和json文件;
- -o, –out:代表導出的文件名;
- -q, –query:代表查詢條件;
- –skip:跳過指定數量的數據;
- –limit:讀取指定數量的數據記錄;
- –sort:對數據進行排序,可以通過參數指定排序的欄位,並使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而-1是用於降序排列,如sort({KEY:1})。
- –authenticationDatabase:指定用戶鑒定庫
5.2 備份示例
單表備份至json格式
mongoexport -u -p --port 28019 --authenticationDatabase admin -d test -c customer -o /tmp/customer.json
[root@zhouweibing tmp]# head customer.json
{"_id":{"$oid":"5ff55c6ac70afd201b763036"},"name":"user0"}
{"_id":{"$oid":"5ff55c6ac70afd201b763037"},"name":"user1"}
註:備份文件的名字和路徑可以自定義,默認導出了JSON格式的數據。
單表備份至csv格式
mongoexport -u -p --port 28019 --authenticationDatabase admin -d replset -c customer --type=csv -f _id,name -o /tmp/customer.csv
[root@zhouweibing tmp]# head customer.csv
_id,name
ObjectId(5ff55c6ac70afd201b763036),user0
ObjectId(5ff55c6ac70afd201b763037),user1
6.導入工具mongoimport
- mongoimport工具可以把一個特定格式文件中的內容導入到指定的collection中。
- 該工具可以導入JSON格式數據,也可以導入CSV格式數據。
6.1 mongoimport關鍵參數如下所示:
mongoimport --help
查看幫助命令
- h,–host :代表遠程連接的資料庫地址,默認連接本地Mongo資料庫;
- –port:代表遠程連接的資料庫的埠,默認連接的遠程埠27017;
- -u,–username:代表連接遠程資料庫的帳號,如果設置資料庫的認證,需要指定用戶帳號;
-p,–password:代表連接資料庫的帳號對應的密碼; - -d,–db:代表連接的資料庫;
- -c,–collection:代表連接資料庫中的集合;
- -f, –fields:代表導入集合中的欄位;
- –type:代表導入的文件類型,包括csv和json,tsv文件,默認json格式;
- –file:導入的文件名稱;
- –headerline:導入csv文件時,指明第一行是列名,不需要導入;
- –authenticationDatabase:指定用戶鑒定庫
6.2 恢復示例
恢復json格式表數據到json
mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c json /tmp/customer.json
恢復csv格式的文件到csv
(1)csv格式的文件頭行,有列名字
mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c csv --type=csv --headerline /tmp/customer.csv
(2)csv格式的文件頭行,沒有列名字
mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c csv1 --type=csv -f _id,name /tmp/customer1.csv
注意:
–headerline和-f不能同時使用
7.異構平台遷移案例
- mysql —> mongodb
- 將MySQL test庫下data表導出成csv格式,再導入到mongodb
7.1 開啟mysql開啟安全路徑
vim /etc/my.cnf --->添加以下配置
secure-file-priv=/tmp
重啟MySQL使配置生效
7.2 導出mysql的data表數據
select * from data limit 1000 into outfile "/tmp/data.csv" fields terminated by ',';
7.3 添加列名資訊到data.csv
desc test.data; #查看列名資訊
vim /tmp/data.csv #在第一行添加列名資訊
d,com_pid,com_name,com_image,com_craw_url_leyu,add_time,status
7.4 在mongodb中導入data.csv
mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c data --headerline --type=csv /tmp/data.csv
7.5 將MySQL world庫下多張表導出
select concat("select * from ",table_schema,".",table_name ," into outfile '/tmp/",table_schema,"_",table_name,".csv' fields terminated by ',';") from information_schema.tables where table_schema ='world';
7.6 mysql導出csv格式轉換:
select * from test_info
into outfile '/tmp/test.csv'
fields terminated by ',' ------欄位間以,號分隔
optionally enclosed by '"' ------欄位用"號括起
escaped by '"' ------欄位中使用的轉義符為"
lines terminated by '\r\n'; ------行以\r\n結束