python 网络爬虫(十四)replaction复制集的实现 + MongoDB数据的几种不同方式导入导出恢复(json,bson,csv格式)

一、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里面有个库名的文件夹,文件夹里面会创建两个文件

  1. 导出的文件放在以database(库名)命名的目录下
  2. 每个表导出2个文件,分别是bson结构的数据文件, json的索引信息
  3. 如果不声明表名, 导出所有的表

在这里插入图片描述

索引在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复制集实现成功!


发布了107 篇原创文章 · 获赞 43 · 访问量 7057
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章