天天看點

mongodb資料庫操作(備份&還原&導出&導入)

mongodb資料備份和還原主要分為二種,一種是針對于庫的mongodump和mongorestore,一種是針對庫中表的mongoexport和mongoimport。(表了解為collections)

一、mongodump備份資料庫

1,常用指令格

1

mongodump -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -o 檔案存在路徑

如果沒有使用者誰,可以去掉-u和-p。

如果導出本機的資料庫,可以去掉-h。

如果是預設端口,可以去掉--port。

如果想導出所有資料庫,可以去掉-d。

2,導出所有資料庫

2

3

4

5

6

7

8

9

10

[root@localhost mongodb] # mongodump -h 127.0.0.1 -o /home/zhangy/mongodb/

connected to: 127.0.0.1

Tue Dec 3 06:15:55.448 all dbs

Tue Dec 3 06:15:55.449 DATABASE:  test    to    /home/zhangy/mongodb/test

Tue Dec 3 06:15:55.449    test .system.indexes to  /home/zhangy/mongodb/test/system .indexes.bson

Tue Dec 3 06:15:55.450     1 objects

Tue Dec 3 06:15:55.450    test .posts to  /home/zhangy/mongodb/test/posts .bson

Tue Dec 3 06:15:55.480     0 objects

3,導出指定資料庫

11

[root@localhost mongodb] # mongodump -h 192.168.1.108 -d tank -o /home/zhangy/mongodb/

connected to: 192.168.1.108

Tue Dec 3 06:11:41.618 DATABASE: tank   to    /home/zhangy/mongodb/tank

Tue Dec 3 06:11:41.623   tank.system.indexes to  /home/zhangy/mongodb/tank/system .indexes.bson

Tue Dec 3 06:11:41.623     2 objects

Tue Dec 3 06:11:41.623   tank.contact to  /home/zhangy/mongodb/tank/contact .bson

Tue Dec 3 06:11:41.669     2 objects

Tue Dec 3 06:11:41.670   Metadata  for tank.contact to  /home/zhangy/mongodb/tank/contact .metadata.json

Tue Dec 3 06:11:41.670   tank. users to  /home/zhangy/mongodb/tank/users .bson

Tue Dec 3 06:11:41.685     2 objects

Tue Dec 3 06:11:41.685   Metadata  for tank. users to  /home/zhangy/mongodb/tank/users .metadata.json

二、mongorestore還原資料庫

1,常用指令格式

mongorestore -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 --drop 檔案存在路徑

--drop的意思是,先删除所有的記錄,然後恢複。

2,恢複所有資料庫到mongodb中

[root@localhost mongodb] # mongorestore /home/zhangy/mongodb/  #這裡的路徑是所有庫的備份路徑

3,還原指定的資料庫

[root@localhost mongodb] # mongorestore -d tank /home/zhangy/mongodb/tank/  #tank這個資料庫的備份路徑

[root@localhost mongodb] # mongorestore -d tank_new /home/zhangy/mongodb/tank/  #将tank還有tank_new資料庫中

這二個指令,可以實作資料庫的備份與還原,檔案格式是json和bson的。無法指寫到表備份或者還原。

三、mongoexport導出表,或者表中部分字段

mongoexport -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -c 表名 -f 字段 -q 條件導出 --csv -o 檔案名

上面的參數好了解,重點說一下:

-f    導出指字段,以字号分割,-f name,email,age導出name,email,age這三個字段,如果想導出嵌套格式的字段,格式為:field.field

-q    可以根查詢條件導出,-q '{ "uid" : "100" }' 導出uid為100的資料

--csv 表示導出的檔案格式為csv的,這個比較有用,因為大部分的關系型資料庫都是支援csv,在這裡有共同點(已過時,建議使用 --type csv )

2,導出整張表

[root@localhost mongodb] # mongoexport -d tank -c users -o /home/zhangy/mongodb/tank/users.dat

exported 4 records

3,導出表中部分字段

[root@localhost mongodb] # mongoexport -d tank -c users --csv -f uid,name,sex -o tank/users.csv

4,根據條件導出資料

[root@localhost mongodb] # mongoexport -d tank -c users -q '{uid:{$gt:1}}' -o tank/users.json

exported 3 records

五、mongoimport導入表,或者表中部分字段

1.1,還原整表導出的非csv檔案

mongoimport -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -c 表名 --upsert --drop 檔案名  

重點說一下--upsert,其他參數上面的指令已有提到,--upsert 插入或者更新現有資料

1.2,還原部分字段的導出檔案

mongoimport -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -c 表名 --upsertFields 字段 --drop 檔案名  

--upsertFields跟--upsert一樣

1.3,還原導出的csv檔案

mongoimport -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -c 表名 --type 類型 --headerline --upsert --drop 檔案名  

上面三種情況,還可以有其他排列組合的。

2,還原導出的表資料

[root@localhost mongodb] # mongoimport -d tank -c users --upsert tank/users.dat

Tue Dec 3 08:26:52.852 imported 4 objects

3,部分字段的表資料導入

[root@localhost mongodb]# mongoimport -d tank -c users  --upsertFields uid,name,sex  tank/users.dat  

connected to: 127.0.0.1  

Tue Dec  3 08:31:15.179 imported 4 objects

4,還原csv檔案

[root@localhost mongodb]# mongoimport -d tank -c users --type csv --headerline --file tank/users.csv

Tue Dec 3 08:37:21.961 imported 4 objects

總體感覺,mongodb的備份與還原,還是挺強大的,雖然有點麻煩。

例子:

mongoexport -d kinth_datacrawl -c common_task_data -q {'taskUuid':'b_hnmY43goyO3JtvYVUKS1'} -o C:\container\fgk.json

mongoexport -d kinth_datacrawl -c common_task_data -q {'taskUuid':'b_hnmY43goyO3JtvYVUKS1'} --type csv -o C:\container\fgk.csv

mongoexport -d kinth_datacrawl -c common_task_data -q {'taskUuid':'b_hnmY43goyO3JtvYVUKS1'} --type csv -f data.title,data.declare_time,data.source,data.content -o C:\container\fgk.csv

————————————————