MongoDB備份(mongoexport)與恢復(mongoimport)

1.備份恢復工具介紹:

  1. mongoexport/mongoimport
  2. 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.版本介紹

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結束

因為有悔,所以披星戴月;因為有夢,所以奮不顧身! 個人博客首發:easydb.net 微信公眾號:easydb 關注我,不走丟!

image

Tags: