一、MongoDB数据的导入导出
1. 通用选项
导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.
所以,都有如下通用选项:
-h host 主机
--port port 端口
-u username 用户名
-p passwd 密码
2. mongoexport 导出json格式的文件与mongoimport导入
-d 库名
-c 表名
-f field1,field2...列名
-q 查询条件
-o 导出的文件名
--type csv 导出csv格式(便于和传统数据库交换数据)
注意:mongoexport在bin文件下与mongo同一级目录
注意各个文件的含义
文件 | 意义 |
---|---|
bsondump.exe | 导出bsondump结构 |
mongo.exe | 客户端 |
mongod.exe | 服务端 |
mongodump.exe | 整体数据库导出(备份工具) |
mongoexport.exe | 导出易识别的json文档 |
mongofiles.exe | GridFS工具,内建的分布式文件系统 |
mongoimport.exe | 数据导入程序 |
mongorestore.exe | 数据恢复工具 |
mongos.exe | 路由器(分片时使用) |
mongostat.exe | 监视程序 |
(1)mongoexport 导出json文件步骤
所以在使用时
- (1)第一步:导出json格式
mongoexport -d shop -c goods -o goods.json
- 输出为json文件,导出到当前路径下
- 内容:
(2)mongoimport导入
- (1)第一步:删除该库,导入文件
- 导入格式
-d 待导入的数据库
-c 待导入的表(不存在会自己创建)
--type csv/json(默认)
--file 备份文件路径
- (2)第二步:导入json
mongoimport -d shop -c goods --file goods.json
结果:
(3)mongoexport导出csv格式
- (1)第一步:导出csv格式(注意:需要指定field列,否则导出失败)
不加–type csv
mongoexport -d shop -c goods -o goods.csv -f goods_id,good_name,shop_price
结果:
加–type csv
mongoexport -d shop -c goods -o goods.csv --type csv -f goods_id,good_name,shop_price
结果:
注意:导出的_id是固定存在的;一定要指定导出字段
(4)mongoimport导入csv文件
mongoimport -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv
3. mongodump导出二进制bson结构的数据及其索引信息
(1)mongodump导出步骤
- 第一步:先创建两个索引(方便查看bson文件)
db.goods.ensureIndex({goods_name:1,goods_id:1})
- 第二步:导出
mongodump -d shop -c goods
注意: 会在当前文件下创建dump;默认是导出到mongo下的dump目录
dump里面有个库名的文件夹,文件夹里面会创建两个文件
- 导出的文件放在以database(库名)命名的目录下
- 每个表导出2个文件,分别是bson结构的数据文件, json的索引信息
- 如果不声明表名, 导出所有的表
索引在json文件中
bson文件中是集合的数据
4. mongorestore 导入二进制文件(恢复)
- 第一步:先删除库
- 第二步:导入
mongorestore -d shop -c goods --dir ./dump/shop/goods.bson
注意–dir是两个-
结果:
二、replaction复制集
一般情况下,我们通常在机器上安装了一个数据库,这是我们的数据都是存在这个数据库中的,如果有一天,因为一些不可控因素导致数据库宕机或者数据库的文件丢失,此时损失就很大了。针对于这种问题,我们希望有一个数据库集,在我们其中一个数据库进行插入的时候,其他数据库也能插入数据,这样其中一台服务器宕机了,也能够使我们的数据正常存取。
在MongoDB中,是通过replaction复制集来实现此功能的。(不推荐使用主从复制)
1. 创建复制集的步骤(windows)
① 第一步:关闭服务 ,关掉mongo服务
创建复制集之前,把所有的mongo服务器都关掉
② 第二步:创建3个db
③ 第三步:打开三个cmd窗口作为3个服务端
打开三个cmd窗口用来启动服务,作为三个服务端(3个db);
注意:不能动这三个cmd窗口
mongod --dbpath C:\MongoDB\Server\3.4\data\db1 --logpath C:\MongoDB\Server\3.4\data\logs\mongo1.log --port 27017 --replSet rs
mongod --dbpath C:\MongoDB\Server\3.4\data\db2 --logpath C:\MongoDB\Server\3.4\data\logs\mongo2.log --port 27018 --replSet rs
mongod --dbpath C:\MongoDB\Server\3.4\data\db3 --logpath C:\MongoDB\Server\3.4\data\logs\mongo3.log --port 27019 --replSet rs
注意:其中的–replSet就表示创建的数据集的名称,必须指定相同的名称才可以。
同时会出现三个日志文件
④ 第四步:配置
小知识:mongo默认27017;可以使用–port 27018指定端口
配置
在主mongo配置;再开启一个cmd窗口,输入mongo或者指定端口
var rsconf = {
_id:'rs',
members:[
{_id:0,host:'127.0.0.1:27017'},
{_id:1,host:'127.0.0.1:27018'},
{_id:2,host:'127.0.0.1:27019'}
]
}
并查看该rsconf
print(rsconf)
⑤ 第五步:配置初始化
rs.initiate(rsconf)
注意: 初始化后一开始show dbs可能有问题,要重新退出再进入查看数据库,才能生效(ctrl+c)
一开始
也可以使用rs.slaveOk()解决这一问题
现在我们看到,现在登录客户端已经不是哪台机器,而是rs复制集
⑥ 第六步:验证,主机插入数据,丛机查看
主机插入数据:
- 主机插入数据
丛机查看数据:
-
进入丛机(当前cmd窗口切换端口进入)
-
丛机默认不能查看或者输入数据;只能作为备份的
-
使用下面的命令可以查看数据
rs.slaveOk()
-
查看数据
-
rs.slaveOk()
相当于允许丛机查看数据
replaction复制集实现成功!