数据的导出
• 语法格式 1
– #mongoexport [--host IP 地址 --port 端口 ]
-d 库名 -c 集合名 -f 字段名 1, 字段名 2
--type=csv
> 目录名 / 文件名 .csv
[root@host51 ~]# mongoexport --help
[root@host51 ~]# mkdir /mbak
[root@host51 ~]# mongoexport --host 192.168.4.51 --port 27051 -d ddsdb -c c2 -f name,school --type=csv > /mbak/c2.csv
2018-08-01T15:47:11.207+0800 connected to: 192.168.4.51:27051
2018-08-01T15:47:11.208+0800 exported 14 records
[root@host51 ~]# cat /mbak/c2.csv
name,school
bob,tarena
zhangsan,danei
张三,达外
jack,tarena
lilei,tarena
xiaoqiang,
tom,
tom,
php,
jj,
kk,
,
,
,
语法格式 2
– #mongoexport --host IP 地址 --port 端口
-d 库名 -c 集合名 -q ‘{ 条件 }’ -f 字段名 1 ,字段名 2 --type=csv > 目录名 / 文件名 .csv
注意:导出为 csv 格式必须使用 -f 指定字段名列表 !!!
[root@host51 ~]# mongoexport --host 192.168.4.51 --port 27051 -d ddsdb -c c2 --type=json > /mbak/c2.json
2018-08-01T15:51:48.273+0800 connected to: 192.168.4.51:27051
2018-08-01T15:51:48.275+0800 exported 14 records
[root@host51 ~]# cat /mbak/c2.json
{"_id":{"$oid":"5b61513d32bc8e678acd6f3f"},"name":"bob","school":"tarena"}
{"_id":{"$oid":"5b61519132bc8e678acd6f40"},"name":"zhangsan","school":"danei"}
{"_id":{"$oid":"5b6151b132bc8e678acd6f41"},"name":"张三","school":"达外"}
{"_id":{"$oid":"5b61526b32bc8e678acd6f42"},"name":"jack","school":"tarena","single":false}
{"_id":{"$oid":"5b6152ea32bc8e678acd6f43"},"name":"lilei","school":"tarena","single":false,"pay":null}
{"_id":{"$oid":"5b61553632bc8e678acd6f44"},"name":"xiaoqiang","like":["gril","eat","piao","sleep"]}
{"_id":{"$oid":"5b61559c32bc8e678acd6f45"},"name":"tom","xf":195}
{"_id":{"$oid":"5b6155ef32bc8e678acd6f46"},"name":"tom","xf":{"$numberLong":"4918"}}
{"_id":{"$oid":"5b61571c32bc8e678acd6f47"},"name":"php","code":{"$code":"function (){}"},"like":100000.0}
{"_id":{"$oid":"5b61590132bc8e678acd6f49"},"name":"jj","stu_id":{"$oid":"5b61590132bc8e678acd6f48"},"class":"nsd1804"}
{"_id":{"$oid":"5b6159bd32bc8e678acd6f4a"},"name":"kk","sr":"Wed Aug 01 2018 14:57:01 GMT+0800 (CST)"}
{"_id":{"$oid":"5b615d4e32bc8e678acd6f4b"},"ywzd":{"writer":"dmy","pay":68.0,"vers":"v2"}}
{"_id":{"$oid":"5b615e2d32bc8e678acd6f4c"},"tarena":{"address":"beijing","tell":8.888888e+06,"person":"harry"}}
{"_id":{"$oid":"5b615f4832bc8e678acd6f4d"},"jbname":"shell","rcode":{"$regex":".$","$options":""}}
[root@host51 ~]#
数据导入:
[root@host51 ~]# mongoimport --help
• 语法格式 1
– #mongoimport –host IP 地址 – port 端口 -d 库名 – c 集合名 --type=json 目录名 / 文件名 .json
> show dbs
admin 0.000GB
config 0.000GB
ddsdb 0.000GB
local 0.000GB
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d gamedb -c col --type=json /mbak/c2.json
2018-08-01T16:22:54.238+0800 connected to: 192.168.4.51:27051
2018-08-01T16:22:54.457+0800 imported 14 documents
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d gamedb -c stu --type=csv /mbak/c2.csv
2018-08-01T16:37:03.316+0800 error validating settings: must specify --fields, --fieldFile or --headerline to import this file type
2018-08-01T16:37:03.316+0800 try 'mongoimport --help' for more information
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d gamedb -c stu --headerline --type=csv /mbak/c2.csv
2018-08-01T16:38:18.720+0800 connected to: 192.168.4.51:27051
2018-08-01T16:38:18.804+0800 imported 14 documents
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d gamedb -c tea -f name,school --type=csv /mbak/c2.csv
2018-08-01T16:40:04.868+0800 connected to: 192.168.4.51:27051
2018-08-01T16:40:05.019+0800 imported 15 documents
• 语法格式 2
– #mongoimport –host IP 地址 – port 端口
-d 库名 – c 集合名
--type=csv --headerline [--drop] 目录名 / 文件名.csv
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d gamedb -c tea -f name,school --type=csv --drop /mbak/c2.csv
2018-08-01T16:41:44.333+0800 connected to: 192.168.4.51:27051
2018-08-01T16:41:44.334+0800 dropping: gamedb.tea
2018-08-01T16:41:44.454+0800 imported 15 documents
练习:
把系统文件(/etc/passwd) 存储到mongodb数据库里的userdb的coluser的集合里
> db.coluser.find()
{ "_id" : ObjectId("5b617485df5cbc631e0dc4bc"), "name" : "yaya", "password" : "x", "uid" : 1, "gid" : 1, "comment" : "my gril", "homedir" : "/home/yaya", "shell" : "/bin/bash" }
[root@host51 ~]# mongoexport --host 192.168.4.51 --port 27051 -d userdb -c coluser -f name,password,uid,gid,comment,homedir,shell --type=csv > /mbak/coluser.csv
2018-08-01T16:54:08.030+0800 connected to: 192.168.4.51:27051
2018-08-01T16:54:08.032+0800 exported 1 record
[root@host51 ~]# cat /mbak/coluser.csv
name,password,uid,gid,comment,homedir,shell
yaya,x,1,1,my gril,/home/yaya,/bin/bash
把 /etc/password/弄成/mbak/coluser.csv 一样的文件格式:
[root@host51 ~]# cp /etc/passwd /mbak/
[root@host51 ~]# cd /mbak/
[root@host51 mbak]# ls
c2.csv c2.json c3.json coluser.csv passwd
[root@host51 mbak]# sed -i 's/:/,/g' passwd
[root@host51 mbak]# head -2 passwd
root,x,0,0,root,/root,/bin/bash
bin,x,1,1,bin,/bin,/sbin/nologin
[root@host51 mbak]# sed -i '$r passwd' coluser.csv
[root@host51 mbak]# head -5 coluser.csv
name,password,uid,gid,comment,homedir,shell
yaya,x,1,1,my gril,/home/yaya,/bin/bash
root,x,0,0,root,/root,/bin/bash
bin,x,1,1,bin,/bin,/sbin/nologin
把文件导入到库里:
[root@host51 mbak]# mongoimport --host 192.168.4.51 --port 27051 -d userdb -c coluser --headerline --drop --type=csv /mbak/coluser.csv
2018-08-01T17:08:36.078+0800 connected to: 192.168.4.51:27051
2018-08-01T17:08:36.078+0800 dropping: userdb.coluser
2018-08-01T17:08:36.240+0800 imported 41 documents
> show dbs
admin 0.000GB
config 0.000GB
ddsdb 0.000GB
gamedb 0.000GB
local 0.000GB
userdb 0.000GB
> use userdb
switched to db userdb
> show tables
coluser
> db.coluser.find()
{ "_id" : ObjectId("5b6178943dd57015866eb75c"), "name" : "yaya", "password" : "x", "uid" : 1, "gid" : 1, "comment" : "my gril", "homedir" : "/home/yaya", "shell" : "/bin/bash" }
{ "_id" : ObjectId("5b6178943dd57015866eb75d
数据备份
• 备份数据所有库到当前目录下的 dump 目录下 //备份所有库所有表
# mongodump [ --host ip 地址 --port 端口 ]
[root@host51 mbak]# mongodump --host 192.168.4.51 --port 27051
[root@host51 mbak]# ls dump/ //在当前目录生成dump目录
admin ddsdb gamedb userdb
• 备份时指定备份的库和备份目录
# mongodump [ --host ip 地址 --port 端口 ] -d 数据库名 -c 集合名 -o 目录
目录无需事先创建 备份时指定即可!!!
[root@host51 mbak]# mongodump --host 192.168.4.51 --port 27051 -d gamedb -c col
2018-08-01T17:37:20.674+0800 writing gamedb.col to
2018-08-01T17:37:20.675+0800 done dumping gamedb.col (14 documents)
[root@host51 mbak]# ls dump/gamedb/
col.bson col.metadata.json stu.bson stu.metadata.json tea.bson tea.metadata.json
[root@host51 mbak]# mongodump --host 192.168.4.51 --port 27051 -d gamedb -c stu /gamedbdir
2018-08-01T17:34:02.924+0800 positional arguments not allowed: [/gamedbdir]
2018-08-01T17:34:02.924+0800 try 'mongodump --help' for more information
[root@host51 mbak]# mkdir /gamedbdir
[root@host51 mbak]# mongodump --host 192.168.4.51 --port 27051 -d gamedb -c stu /gamedbdir
2018-08-01T17:34:46.646+0800 positional arguments not allowed: [/gamedbdir]
2018-08-01T17:34:46.646+0800 try 'mongodump --help' for more information
[root@host51 mbak]# mongodump --host 192.168.4.51 --port 27051 -d gamedb -c stu -o /bake
2018-08-01T17:36:10.018+0800 writing gamedb.stu to
2018-08-01T17:36:10.020+0800 done dumping gamedb.stu (14 documents)
[root@host51 mbak]# ls /bake/
gamedb
[root@host51 mbak]# ls /bake/gamedb/
stu.bson stu.metadata.json
• 查看 bson 文件内容
#bsondump ./dump/bbs/t1.bson
[root@host51 mbak]# bsondump ./dump/ddsdb/c2.bson
{"_id":{"$oid":"5b61513d32bc8e678acd6f3f"},"name":"bob","school":"tarena"}
{"_id":{"$oid":"5b61519132bc8e678acd6f40"},"name":"zhangsan","school":"danei"}
{"_id":{"$oid":"5b6151b132bc8e678acd6f41"},"name":"张三","school":"达外"}
{"_id":{"$oid":"5b61526b32bc8e678acd6f42"},"name":"jack","school":"tarena","single":false}
{"_id":{"$oid":"5b6152ea32bc8e678acd6f43"},"name":"lilei","school":"tarena","single":false,"pay":null}
{"_id":{"$oid":"5b61553632bc8e678acd6f44"},"name":"xiaoqiang","like":["gril","eat","piao","sleep"]}
{"_id":{"$oid":"5b61559c32bc8e678acd6f45"},"name":"tom","xf":195}
{"_id":{"$oid":"5b6155ef32bc8e678acd6f46"},"name":"tom","xf":{"$numberLong":"4918"}}
{"_id":{"$oid":"5b61571c32bc8e678acd6f47"},"name":"php","code":{"$code":"function (){}"},"like":100000.0}
{"_id":{"$oid":"5b61590132bc8e678acd6f49"},"name":"jj","stu_id":{"$oid":"5b61590132bc8e678acd6f48"},"class":"nsd1804"}
{"_id":{"$oid":"5b6159bd32bc8e678acd6f4a"},"name":"kk","sr":"Wed Aug 01 2018 14:57:01 GMT+0800 (CST)"}
{"_id":{"$oid":"5b615d4e32bc8e678acd6f4b"},"ywzd":{"writer":"dmy","pay":68.0,"vers":"v2"}}
{"_id":{"$oid":"5b615e2d32bc8e678acd6f4c"},"tarena":{"address":"beijing","tell":8.888888e+06,"person":"harry"}}
{"_id":{"$oid":"5b615f4832bc8e678acd6f4d"},"jbname":"shell","rcode":{"$regex":".$","$options":""}}
2018-08-01T17:41:33.663+0800 14 objects found
数据恢复:
• 语法格式
– mongorestore --host IP 地址 --port 端口 -d 数据库名 [ -c 集合名 ] 备份目录名
模拟数据丢失:
方法一:
> db.stu.remove({})
WriteResult({ "nRemoved" : 14 })
[root@host51 mbak]# mongorestore --host 192.168.4.51 --port 27051 -d gamedb -c stu /bake/gamedb/stu.bson
2018-08-01T17:46:20.073+0800 checking for collection data in /bake/gamedb/stu.bson
2018-08-01T17:46:20.074+0800 reading metadata for gamedb.stu from /bake/gamedb/stu.metadata.json
2018-08-01T17:46:20.075+0800 restoring gamedb.stu from /bake/gamedb/stu.bson
2018-08-01T17:46:20.137+0800 no indexes to restore
2018-08-01T17:46:20.137+0800 finished restoring gamedb.stu (14 documents)
2018-08-01T17:46:20.137+0800 done
> db.stu.count()
14
> db.stu.find()
方法二: //重新建立一个新的集合
[root@host51 mbak]# mongorestore --host 192.168.4.51 --port 27051 -d gamedb -c regtab /bake/gamedb/stu.bson
2018-08-01T17:47:47.238+0800 checking for collection data in /bake/gamedb/stu.bson
2018-08-01T17:47:47.240+0800 reading metadata for gamedb.regtab from /bake/gamedb/stu.metadata.json
2018-08-01T17:47:47.332+0800 restoring gamedb.regtab from /bake/gamedb/stu.bson
2018-08-01T17:47:47.395+0800 no indexes to restore
2018-08-01T17:47:47.395+0800 finished restoring gamedb.regtab (14 documents)
2018-08-01T17:47:47.395+0800 done
> show tables
col
regtab
stu
tea
方法三: //建立一个新的库和新的集合
[root@host51 mbak]# mongorestore --host 192.168.4.51 --port 27051 -d buydb -c regtab /bake/gamedb/stu.bson
2018-08-01T17:50:33.832+0800 checking for collection data in /bake/gamedb/stu.bson
2018-08-01T17:50:33.833+0800 reading metadata for buydb.regtab from /bake/gamedb/stu.metadata.json
2018-08-01T17:50:33.926+0800 restoring buydb.regtab from /bake/gamedb/stu.bson
2018-08-01T17:50:33.989+0800 no indexes to restore
2018-08-01T17:50:33.989+0800 finished restoring buydb.regtab (14 documents)
2018-08-01T17:50:33.989+0800 done
> use buydb
switched to db buydb
> show tables
regtab