mongodb(官方文档翻译3.4)

本文全面介绍了MongoDB的安装、配置、使用及管理,涵盖Windows和Linux环境下的操作指南,深入解析了数据库管理、安全配置、复制集、分片、监控、备份与恢复等核心功能。同时,提供了丰富的示例和最佳实践,帮助读者掌握MongoDB的高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司使用了mongodb,于是我把学习mongodb时,根据官方英文文档翻译过来的笔记拿出来看了一遍,分享出来供广大网友学习参考…如有不足请多多指教!

编译文档

This repository contains a major revision of the MongoDB documentation, currently accessible at http://docs.mongodb.org/manual/. You can build the documentation locally if you have giza and Inkscape installed:
【linux】
【pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。
pip is already installed if you’re using Python 2 >=2.7.9 or Python 3 >=3.4
or
https://pip.pypa.io/en/stable/installing/

#pip install giza
#yum install git
git clone https://github.com/mongodb/docs.git(当前版本)
git clone --branch v3.4 https://github.com/mongodb/docs.git(指定版本)
cd docs/
make html
cd …/
#tar -zcf docs.tar.gz docs

Linux安全

selinux关闭:

#setenforce 0 --临时生效
#vim /etc/selinux/config —修改 SELINUX=disabled
在这里插入图片描述
#getenforce (查看)
在这里插入图片描述
(成功关闭)

防火墙(linux6 iptables | linux7 firewall)

linux6
#vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
#service iptables restart --重启
#chkconfig iptables off --设置开机不启动
#service iptables stop --关闭
linux7
#firewall-cmd --zone=public --add-port=8080/tcp --permanent –添加
#firewall-cmd --reload --重启
#firewall-cmd --zone=public --list-ports --查看
#systemctl disable firewalld --禁用
#systemctl stop firewalld --停用

安装

Windows

下载: https://www.mongodb.com/download-center#community
1.安装后在根目录下创建: data (数据) log(日志) 目录、mongodb.conf (配置文件)
在这里插入图片描述
2.配置mongodb.conf

dbpath=D:\DataBase\MongoDB\Server\3.4\db
logpath=D:\DataBase\MongoDB\Server\3.4\log\mongodb.log
logappend=true
journal=true
quiet=true
port=27017

3.启动脚本(mongod-start.bat)

@echo off
ECHO. * * * * Mongod 服务端 启动脚本 For Windows * * * *
ECHO. * * * * write by liuli * * * ** * * ** * * ** * *
d:
cd D:\DataBase\MongoDB\Server\3.4\bin
ECHO. Mongod start…
mongod --config D:\DataBase\MongoDB\Server\3.4\mongodb.conf
pause

  1. 通过执行mongod.exe,使用–install选项来安装服务(已管理员身份运行cmd)

mongod --config D:\DataBase\MongoDB\Server\3.4\mongodb.conf --install
net start MongoDB
net stop MongoDB
删除服务
mongod –remove

在这里插入图片描述
5. 后台管理 Shell(注意:这里把D:\DataBase\MongoDB\Server\3.4\bin加入到了环境变量)
在这里插入图片描述

Linux-配置安装

1.解压

#tar -zxvf mongodb-linux-x86_64-rhel70-3.4.10.tgz

2.创建目录和配置文件

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(–dbpath)。
#cd /home
#mv mongodb-linux-x86_64-rhel70-3.4.10 mongodb3.4
#mkdir {data,log}
#vim mongodb.conf
dbpath=/home/mongodb3.4/data
logpath=/home/mongodb3.4/mongodb.log
logappend=true
journal=true
directoryperdb=true
quiet=true
port=27017

3.启动(后台运行)

#/home/mongodb3.4/bin/mongod --fork --config /home/mongodb3.4/mongodb.conf &

在这里插入图片描述

#/home/mongodb3.4/bin/mongod --config /home/mongodb3.4/mongodb.conf &
需要在mongodb.conf中添加:
fork = true (不支持windows)

4.设置开机启动
#vim /etc/rc.d/init.d/mongodb

#######start
#!/bin/bash
#chkconfig:35 99 01
EXE_FILE=/home/mongodb3.4/bin/mongod
CONFIG_FILE=/home/mongodb3.4/mongodb.conf
MONGOPID=ps -ef| grep mongod| grep -v grep| awk '{print $2}'
case “$1” in
start)
ulimit -n 3000
echo -n “Starting MongoDB server”
$EXE_FILE --config KaTeX parse error: Expected 'EOF', got '&' at position 13: CONFIG_FILE &̲ echo "[ ok…MONGOPID" ]; then
kill -15 $MONGOPID
fi
echo “[ ok ]”
;;
status)
ps -aux| grep mongod
;;
*)
echo -n “Usage: /etc/init.d/mongodb {start|stop|status}”
exit 1
esac
exit 0
######end

注册服务:

#chmod 755 /etc/rc.d/init.d/ mongodb
#chkconfig --add mongodb
#chkconfig --list mongodb
#chkconfig --del mongodb --不需要了可以删除

5.管理

(linux7)
#systemctl start mongodb 启动
#systemctl stop mongodb 关闭
(linux6 7)
#service mongodb start 启动
#service mongodb stop 关闭

Linux-yum安装

配置yun源
#vim /etc/yum.repos.d/mongodb-org-3.4.repo

v3
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
v2
[mongodb-org-2.6]
name=MongoDB 2.6 Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
安装
#yum install -y mongodb-org

/var/lib/mongo – 数据库路径
/var/log/mongodb --log路径
/etc/mongod.conf --配置文件
管理
在这里插入图片描述

**准备

shell**
(mongo)
1、连接 mongo ./mongo 【依据安装方式】
2、退出 quit() exit ctrl+c
3、显示当前命令数:
cmdCount = 1;
prompt = function() {
return (cmdCount++) + “> “;
}
4、显示主机和数据库信息
host = db.serverStatus().host;
prompt = function() {
return db+”@”+host+"$ “;
}
5、自定义提示以显示时间和文档计数
prompt = function() {
return “Uptime:”+db.serverStatus().uptime+” Documents:"+db.stats().objects+" > ";
}
6、修改控制台输出数据量(默认20)
DBQuery.shellBatchSize = 10;

------------------ mongo
mongo –help
mongo –nodb --不连接数据库,稍后连接
----------------------db
show dbs --服务器上所有数据库
use – 切换当前数据库
db.help()
db.dropDatabase() – 删除db
show users --当前数据库的用户
show roles --当前数据库的所有角色
show profile --打印花费1毫秒或更多的五个最近的操作
show databases --所有可用数据库的列表
load() --执行一个JavaScript文件
show collections当前数据库的所有集合
db.collection.help()
db.collection.find().help()
db.collection.find().toArray --查看方法实现
-------------------------------js
db.auth() 如果以安全模式运行,则认证用户。
coll = db. 将当前数据库中的特定集合设置为一个变量 coll,如下例所示:
db.collection.find() 查找集合中的所有文档并返回一个游标。
db.collection.insertOne() 将新文档插入到集合中。
db.collection.insertMany() 将多个新文档插入到集合中。
db.collection.updateOne() 更新集合中的单个现有文档。
db.collection.updateMany() 更新集合中的多个现有文档。
db.collection.save() 插入新文档或更新集合中的现有文档。
db.collection.deleteOne() 从集合中删除单个文档。
db.collection.deleteMany() 从集合中删除文档。
db.collection.drop() 丢弃或删除完整的集合。
db.collection.createIndex() 如果索引不存在,则在集合上创建一个新索引; 否则,操作无效。
db.getSiblingDB() 使用相同的连接返回对另一个数据库的引用,而不显式切换当前数据库。这允许跨数据库查询。

基本概念

SQL术语/概念 MongoDB术语/概念 解释/说明
在这里插入图片描述
注意:
1.文档中的键/值对是有序的
2.MongoDB区分类型和大小写
元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间:dbname.system.*
在这里插入图片描述
数据类型(常见数据类型)
在这里插入图片描述

CRUD

Create

db.collection.insertOne() 3.2+
db.collection.insertMany() 3.2+
db.collection.insert()

Read

db.collection.find()
db.collection.findOne() —查询一条
db.collection.find().pretty() —格式化输出
show collections --查询所有文档

Update

db.collection.update()
db.collection.save()
db.collection.updateOne() 3.2+
db.collection.updateMany() 3.2+
db.collection.replaceOne() 3.2+

Delete

db.collection.deleteOne() 3.2+
db.collection.deleteMany() 3.2+

插入
参考:https://github.com/472732787/mongodb/tree/master/sql

查询
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
在这里插入图片描述

参考:https://github.com/472732787/mongodb/tree/master/sql
修改
参考:https://github.com/472732787/mongodb/tree/master/sql

删除
在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

Bulk Write

在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

索引

ensureIndex() 方法来创建索引

db.COLLECTION_NAME.ensureIndex({KEY:1})
Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可,ensureIndex() 接收可选参数,可选参数列表如下:
在这里插入图片描述
参考:https://github.com/472732787/mongodb/tree/master/sql

TextSearch

参考:https://github.com/472732787/mongodb/tree/master/sql

管理

配置

在这里插入图片描述
-------------------------------------配置参数-------------------------------------------

–quiet # 安静输出
–port arg # 指定服务端口号,默认端口27017
–bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
–logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
–logappend # 使用追加的方式写日志
–pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
–keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
–unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
–fork # 以守护进程的方式运行MongoDB,创建服务器进程
–auth # 启用验证
–cpu # 定期显示CPU的CPU利用率和iowait
–dbpath arg # 指定数据库路径
–diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
–directoryperdb # 设置每个数据库将被保存在一个单独的目录
–journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
–journalOptions arg # 启用日志诊断选项
–ipv6 # 启用IPv6选项
–jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
–maxConns arg # 最大同时连接数 默认2000
–noauth # 不启用验证
–nohttpinterface # 关闭http接口,默认关闭27018端口访问
–noprealloc # 禁用数据文件预分配(往往影响性能)
–noscripting # 禁用脚本引擎
–notablescan # 不允许表扫描
–nounixsocket # 禁用Unix套接字监听
–nssize arg (=16) # 设置信数据库.ns文件大小(MB)
–objcheck # 在收到客户数据,检查的有效性,
–profile arg # 档案参数 0=off 1=slow, 2=all
–quota # 限制每个数据库的文件数,设置默认为8
–quotaFiles arg # number of files allower per db, requires --quota
–rest # 开启简单的rest API
–repair # 修复所有数据库run repair on all dbs
–repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
–slowms arg (=100) # value of slow for profile and console log
–smallfiles # 使用较小的默认文件
–syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
–sysinfo # 打印一些诊断系统信息
–upgrade #如果需要升级数据库 * Replicaton 参数


–fastsync # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
–autoresync # 如果从库与主库同步数据差得多,自动重新同步,
–oplogSize arg # 设置oplog的大小(MB) * 主/从参数,默认为硬盘剩余空间的5%


–master # 主库模式
–slave # 从库模式
–source arg # 从库 端口号
–only arg # 指定单一的数据库复制
–slavedelay arg # 设置从库同步主库的延迟时间 * Replica set(副本集)选项:


–replSet arg # 设置副本集名称 * Sharding(分片)选项


–configsvr # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
–shardsvr # 声明这是一个集群的分片,默认端口27018

关闭

查看进程
#netstat -tlnp |grep mongod
强制关闭
#kill -9
#pkill mongod
–建议使用
kill
kill -2
–干净关闭
use admin
db.shutdownServer()
–需要指定数据库集目录(默认/data/db)
mongod --shutdown --dbpath /var/lib/mongo/

—意外关机恢复
【不正确的关闭可能会使数据处于不一致的状态。在不正常关机后,如果存在非空 mongod.lock文件,则mongod实例在重新启动时记录以下消息:
Detected unclean shutdown - mongod.lock is not empty.

–操作之前最好先备份
mongod --dbpath /var/lib/mongo --repair

安全

用户

警告处理

  1. WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted.
  2. WARNING: You are running this process as the root user, which is not recommended.
  3. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
  4. WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’. We suggest setting it to ‘never’

配置文件中添加 【配置完用户后在开启】
–老版本
auth=true
–新版本 yaml格式
security:
authorization: enabled
在这里插入图片描述
启用身份认证
在启用之前确保在admin库中有userAdmin或userAdminAnyDatabase角色的用户,此用户可以管理用户和角色

  1. 启动没有访问控制的MongoDB(关闭认证)
  2. 连接到数据库创建管理员用户

use admin
– 创建
db.createUser(
{
user: “admin”,
pwd: “admin”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)
– 查询
db.system.users.find()

  1. 重启认证(启用认证)

use admin
db.auth(“admin”,“admin”)
or
#mongo --port 27017 -u “admin” -p “admin” --authenticationDatabase “admin”

在这里插入图片描述
该用户对其他数据库没有访问权限(和oracle/mysql。。。。不一样)
4. 为test库 创建用户

use test
db.createUser(
{
user: “test”,
pwd: “test”,
roles: [ { role: “readWrite”, db: “test” }]
}
)
db.auth(“test”,“test”)
or
#mongo --port 27017 -u “test” -p “test” --authenticationDatabase “test” –
在这里插入图片描述
可以访问了

  1. 查询用户【用户信息在admin库】

db.system.users.find()
or
use test
db.getUser(“test”)
在这里插入图片描述
 1.思考:如果切换到test 直接在admin为test 创建
use admin
db.createUser(
{
user: “mytest”,
pwd: “mytest”,
roles: [ { role: “readWrite”, db: “test” }]
}
)
之前认证失败:
use test
switched to db test
db.auth(“mytest”,“mytest”)
Error: Authentication failed.
0
在这里插入图片描述
 2.测试(roles 中db 的作用):
db.createUser(
{
user: “mytest”,
pwd: “mytest”,
roles: [ { role: “readWrite”}]
}
)
couldn’t add user: Missing expected field “db”

  1. 修改密码

db.changeUserPassword(“test”, “123456”)

在这里插入图片描述

角色

  1. 查看数据库用户角色

use test
db.getUser(“test”)

  1. 自定义角色

use admin
db.createRole(
{
role: “myRole”,
privileges: [
{
actions: [ “dropCollection” ],
resource: { db: “”, collection: “system.views” }
}
],
roles: []
}
)
–删除自定义角色
db.dropRole(“myRole”)

  1. 获取指定角色的用户以及详细权限

use test
db.getRole( “readWrite”, { showPrivileges: true } )

  1. 授权

use test
db.grantRolesToUser(
“test”,
[
{ role: “read”, db: “test” }
]
)
db.getUser(“test”) --查询结果

  1. 回收

db.revokeRolesFromUser(
“test”,
[
{ role: “read”, db: “test” }
]
)
db.getUser(“test”) --查询结果
在这里插入图片描述
在这里插入图片描述

角色管理方法
在这里插入图片描述

角色权限

                               参考官方文档

权限不足?

db.serverStatus()
{
“ok” : 0,
“errmsg” : “not authorized on admin to execute command { serverStatus: 1.0 }”,
“code” : 13,
“codeName” : “Unauthorized”
}

  1. 找到该权限对应的角色:clusterMonitor
  2. 给用户赋予该角色
    db.grantRolesToUser(
    “admin”,
    [
    { role: “clusterMonitor”, db: “admin” }
    ]
    )
    db.serverStatus() -不要重新登录,立马生效

sys collection

–需要dbAdmin权限

use admin
db.grantRolesToUser(
“admin”,
[
{ role: “dbAdmin”, db: “admin” }
]
)
–查询
db.system.roles.find() --存放用户自定义角色
db.system.users.find() --用户信息
db.system.version.find() --版本信息

ssl

https://github.com/472732787/mongodb/tree/master/ssl

  1. 生成自签名证书和私钥, 将证书和私钥连接到.pem文件
    #cd /etc/ssl/
    #openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
    #cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
    在这里插入图片描述
  2. 配置加密连接(vim /etc/mongod.conf)
    – 新版基于yaml格式
    net:
    ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    –老版
    sslMode = requireSSL
    sslPEMKeyFile = /etc/ssl/mongodb.pem
    重启服务: systemctl restart mongod
  3. 客户端连接
    #vim /etc/hosts
    127.0.0.1 www.test.com
    #mongo --ssl --host www.test.com --sslCAFile /etc/ssl/mongodb.pem

存储

Storage Engines

存储引擎是数据库的一部分,负责管理数据在内存和磁盘上的存储方式
–storageEngine
WiredTiger 3.2开始默认的存储引擎【在64位版本中可用,3.0或更高版本】,非常适合大多数工作负载,推荐使用,WiredTiger提供了文档级的并发模型(mvcc),检查点和压缩等功能。在MongoDB Enterprise中,WiredTiger还支持静态 加密。
检查点(即将快照数据写入磁盘),间隔为60秒或2千兆字节的日志数据。
MMAPv1是原始的MongoDB存储引擎,是3.2之前的MongoDB版本的默认存储引擎。它在大量读取和写入以及就地更新的工作负载上表现良好。
每60秒钟写入磁盘上的数据文件,并大约每100毫秒写入日志文件。
storage.syncPeriodSecs
storage.journal.commitIntervalMs
In-Memory不是将文件存储在磁盘上,而是将其保留在内存中,以获得更可预测的数据延迟。(紧企业版支持)

MMAPv1 —升级-–》WiredTiger
单节点:
mongodump --out
mongod --storageEngine wiredTiger --dbpath
mongorestore
副本
db.shutdownServer()
mongod --storageEngine wiredTiger --dbpath --replSet
集群(参考上面)

Journaling

在这里插入图片描述
oeacel : redo log | mysql :binlog
WiredTiger存储引擎
为了在出现故障时提供持久性,能提供崩溃恢复能力,MongoDB使用预写日志记录到磁盘日志文件。
通过日记,恢复过程:
1.查看数据文件以查找上一个检查点的标识符。
2.在日志文件中搜索与上一个检查点的标识符相匹配的记录。
3.从上一个检查点开始,在日志文件中应用这些操作。
目录:dbPath/ journal
格式:WiredTigerLog.
大小:约为100 MB。一旦文件超过这个限制,WiredTiger将创建一个新的日志文件
A clean shutdown removes all the files in the journal directory. A dirty shutdown (crash) leaves files in the journal directory; these are used to automatically recover the database to a consistent state when the mongod process is restarted.
在这里插入图片描述
MMAPv1存储引擎
当发生写操作时,MongoDB会更新内存视图。启用日记功能后,MongoDB首先将内存中的更改写入磁盘日志文件。如果MongoDB在对数据文件进行更改前终止或遇到错误,MongoDB可以使用日志文件将写入操作应用于数据文件并保持一致的状态。

GridFS

GridFS是用于存储和检索超过 BSON- document大小限制 16 MB的文件
GridFS使用两个集合来存储文件。一个集合存储文件块,另一个存储文件元数据
使用:

  1. MongoDB驱动程序
  2. mongofiles命令行工具

监控

需要clusterMonitor权限

mongostat

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。
./mongostat 5 --5s返回一次

mongotop

mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。
./mongotop 5 --5s返回一次

db.serverStatus()

会返回数据库状态的总体概述,详细介绍磁盘使用情况,内存使用情况,连接情况,日志记录和索引访问。

db.stats()

反映存储的使用量,包含在数据库中的数据的数量,和对象,收集和索引计数器。

db.collection.stats()

集合的信息,同(db.stats())

rs.status()

副本集的状态概述

SNMP

MongoDB Enterprise can provide database metrics via SNMP

备份恢复

mongodump

mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:/home,当然该目录需要提前建立,在备份完成后,系统自动在home目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
在这里插入图片描述
#./mongodump -h 127.0.0.1 -d test -o /home
在这里插入图片描述
BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据

mongorestore

mongorestore -h <:port> -d dbname
–host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
–db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!

mongorestore 最后的一个参数,设置备份数据所在位置,例如:/home/test。
你不能同时指定 和 --dir 选项,–dir也可以设置备份目录。
–dir:
指定备份的目录
你不能同时指定 和 --dir 选项。

–删除

use test
db.dropDatabase()
–恢复(基于前面的数据演示)
./mongorestore --db test /home/test/
./mongorestore --db test --drop --dir /home/test/
./mongorestore --db test --collection mycol --dir /home/test/mycol.bson
–查看
show dbs
show collections

Replication

Replica Set Master-Slave

在这里插入图片描述
1.主(Master)可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。
2.从(Slave)只读不可写,自动从Master同步数据
并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set.

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir Replication\Master\db &
mkdir Replication\Master\logs &
mkdir Replication\Slave\db &
mkdir Replication\Slave\logs
配置
主节点(配置文件)
D:\DataBase\MongoDB\Server\Replication\mongodb-Master.conf
dbpath=D:\DataBase\MongoDB\Server\Replication\Master\db
logpath=D:\DataBase\MongoDB\Server\Replication\Master\logs\mongodb.log
logappend=true
journal=true
quiet=true
port=37027
#主节点配置
master=true
oplogSize=2048
从节点(配置文件)
D:\DataBase\MongoDB\Server\Replication\mongodb-Slave.conf

dbpath=D:\DataBase\MongoDB\Server\Replication\Slave\db
logpath=D:\DataBase\MongoDB\Server\Replication\Slave\logs\mongodb.log
logappend=true
journal=true
quiet=true
port=37037
#配置从节点
slave=true
source=127.0.0.1:37027
autoresync=true

启动
mongod --config D:\DataBase\MongoDB\Server\Replication\mongodb-Master.conf
mongod --config D:\DataBase\MongoDB\Server\Replication\mongodb-Slave.conf
验证
连接到主库,插入数据

mongo --port 37207
db.printReplicationInfo() —查看主节点的状态
use test
db.runoob.insert({“name”:“第一个值”})
show dbs
连接到从库,查看数据
mongo --port 37037
db.printSlaveReplicationInfo() – 查看从节点的状态
默认 从库是禁止读写的(在从节点上,需要在执行rs.slaveOk())
rs.slaveOk()
show dbs
db.runoob.find()
测试插入(报错):
db.runoob2.insert({“name”:“第一个值”})
“code” : 10107, “errmsg” : “not master”

Replica Set Arbiter

在这里插入图片描述
(1)主节点(Primary)
接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。
(2)副本节点(Secondary)
与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
(3)仲裁者(Arbiter)
不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。
(4)选主过程
其中Secondary宕机,不受影响,若Primary宕机,会进行重新选主:
在这里插入图片描述

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir ReplicaSet\rs0-0\db &
mkdir ReplicaSet\rs0-1\db &
mkdir ReplicaSet\rs0-2\db &
mkdir ReplicaSet\rs0-3\db&
mkdir ReplicaSet\rs0-4\db&

配置
【不要在副本集的同一系统上运行】
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0.conf (做观察者)
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-0.log
logappend=true
journal=true
quiet=true
port=37300
#rs0
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1.conf(做主节点)
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-1.log
logappend=true
journal=true
quiet=true
port=37301
#rs1
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-2.log
logappend=true
journal=true
quiet=true
port=37302
#rs2
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-3.log
logappend=true
journal=true
quiet=true
port=37303
#rs3
replSet=rs0
oplogSize=2048
D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4.conf
dbpath=D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4\db
logpath=D:\DataBase\MongoDB\Server\ReplicaSet\mongodb-4.log
logappend=true
journal=true
quiet=true
port=37304
#rs3
replSet=rs0
oplogSize=2048

启动
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-0.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-1.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-2.conf
–演示添加 删除
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-3.conf
mongod --config D:\DataBase\MongoDB\Server\ReplicaSet\rs0-4.conf
所有配置都必须在主节点Primary上操作
连接主节点【37301】

mongo 127.0.0.1:37301
–使用rs.initiate()添加主节点
rsconf = {
_id: “rs0”,
members: [
{
_id: 0,
host: “127.0.0.1:37301”
}
]
}
–初始化配置
rs.initiate(rsconf)
–添加其他节点
rs.add(“127.0.0.1:37302”)
–添加仲裁节点
rs.addArb(“127.0.0.1:37300”)
–验证配置
rs.conf()
–查看状态
rs.status()

–添加其他节点

rs.add(“127.0.0.1:37303”)
rs.add(“127.0.0.1:37304”)

删除节点:

rs.remove(“127.0.0.1:37303”)
rs.remove(“127.0.0.1:37304”)
-----修改优先级
rs.reconfig()
–修改members优先级
cfg = rs.conf()
cfg.members[2].priority = 0.1 (如果修改的是主节点,修改就不在是主节点了)
rs.reconfig(cfg)
–设置隐藏副本(不能是主节点,对客户端不可见,可以参与投票,一般做备份使用)
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)
–配置延迟副本
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)
–让成员不参与投票
cfg = rs.conf()
cfg.members[3].votes = 0;
cfg.members[3].priority = 0;
rs.reconfig(cfg)
解压后放在: D:\DataBase\MongoDB\Server

Shard:

用于存储实际的数据块,每个碎片包含分片数据的一个子集。每个分片都可以作为副本集进行部署.
Config Server:
配置服务器存储群集的元数据和配置设置, 从MongoDB 3.4开始,必须将配置服务器部署为副本集(CSRS)
要求:
• Must have zero arbiters.
• Must have no delayed members.
• Must build indexes (i.e. no member should have buildIndexes setting set to false).
Router(mongos):
mongos作为查询路由器,提供客户端应用程序和分片集群之间的接口
在这里插入图片描述
测试环境可简化:
在这里插入图片描述
MongoDB在集合级别分割数据,将集合数据分布到集群中的分片上。

配置

目录准备(根目录D:\DataBase\MongoDB\Server)
d:
cd D:\DataBase\MongoDB\Server
mkdir HashedSharding\hs0-0\db &
mkdir HashedSharding\hs0-1\db &
mkdir HashedSharding\hs0-2\db&
mkdir HashedSharding\hs0-3\db &
mkdir HashedSharding\hs0-4\db &
mkdir HashedSharding\hs0-5\db &
mkdir HashedSharding\hs0-6\db
【Config Server :0、1、2 Shard :3、4 Routers 5、6】
配置 Config Server (3个 配置成为一个replica set)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-0.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-0.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-0\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-0\mongod.pid # location of pidfile

#network interfaces
net:
port: 37400
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-1.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-1.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-1\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-1\mongod.pid # location of pidfile

#network interfaces
net:
port: 37401
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-2.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-2.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-2\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-2\mongod.pid # location of pidfile

#network interfaces
net:
port: 37402
sharding:
clusterRole: configsvr
replication:
replSetName: hs0
启动
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-0.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-1.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-2.conf
初始化
–连接任意一个节点
mongo 127.0.0.1:37400/37401/37402
rs.initiate(
{
_id: “hs0”,
configsvr: true,
members: [
{ _id : 0, host : “127.0.0.1:37400” },
{ _id : 1, host : “127.0.0.1:37401” },
{ _id : 2, host : “127.0.0.1:37402” }
]
}
)
配置 Shard (2个)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-3.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-3.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-3\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-3\mongod.pid # location of pidfile

#network interfaces
net:
port: 37501
sharding:
clusterRole: shardsvr
replication:
replSetName: hs0
D:\DataBase\MongoDB\Server\HashedSharding\hs0-4.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-4.log
#Where and how to store data.
storage:
dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-4\db
journal:
enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-4\mongod.pid # location of pidfile

#network interfaces
net:
port: 37502
sharding:
clusterRole: shardsvr
replication:
replSetName: hs0
启动
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-3.conf
mongod --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-4.conf
初始化
–连接任意一个节点
mongo 127.0.0.1:37501/37502
rs.initiate(
{
_id : “hs0”,
members: [
{ _id : 0, host : “127.0.0.1:37501” },
{ _id : 1, host : “127.0.0.1:37502” }
]
}
)
配置 Router(mongos) (2个)
D:\DataBase\MongoDB\Server\HashedSharding\hs0-5.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-5.log
#Where and how to store data.
#storage:
#dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-5\db
#journal:
#enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-5\mongod.pid # location of pidfile

#network interfaces
net:
port: 37601
sharding:
configDB: hs0/127.0.0.1:37400,127.0.0.1:37401,127.0.0.1:37402
D:\DataBase\MongoDB\Server\HashedSharding\hs0-6.conf
#where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\DataBase\MongoDB\Server\HashedSharding\mongodb-6.log
#Where and how to store data.
#storage:
#dbPath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-6\db
#journal:
#enabled: true
#how the process runs
processManagement:
#fork: true # fork and run in background only for linux
pidFilePath: D:\DataBase\MongoDB\Server\HashedSharding\hs0-6\mongod.pid # location of pidfile

#network interfaces
net:
port: 37602
sharding:
configDB: hs0/127.0.0.1:37400,127.0.0.1:37401,127.0.0.1:37402
注意:
configDB: hs0 之前有个空格(去掉会报错)
启动
mongos --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-5.conf
mongos --config D:\DataBase\MongoDB\Server\HashedSharding\hs0-6.conf
添加shards
–连接任意一个节点
mongo 127.0.0.1:37601/37602
–添加
sh.addShard( “hs0/127.0.0.1:37501”)
sh.addShard( “hs0/127.0.0.1:37502”)
–开启数据共享
sh.enableSharding(“test”)
–共享集合
Hashed Sharding
sh.shardCollection(".", { : “hashed” } )
Ranged Sharding
sh.shardCollection(".", { : } )

管理

在Config Server上
–连接任意一个节点

mongo 127.0.0.1:37400/37401/37402
use config
–查询群集中所有数据库的列表
db.databases.find()
–查看所有集合
show collections
–查看集群详情
db.printShardingStatus()
sh.status()
添加shared
– a shard for a replica set
sh.addShard( “rs1/mongodb0.example.net:27018” )
– a standalone mongod
sh.addShard( “mongodb0.example.net:27018” )
在Router(mongos):上
–查看所有Shard
db.adminCommand( { listShards: 1 } )

MongoDB Java

http://mongodb.github.io/mongo-java-driver/
查看版本./mongod --version

org.mongodb mongo-java-driver 3.4.3

参考:https://github.com/472732787/mongodb/tree/master/client

文中所涉及的代码和配置文件请移步github
https://github.com/472732787/mongodb

MongoDB Spring Boot

https://github.com/472732787/com-spring-multiple-datasource/tree/master/multiple-datasource-mongo

1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。Spring Data MongoDB 1.7中有什么新功能 6.依赖 6.1。Spring Boot的依赖管理 6.2。Spring框架 7.使用Spring Data Repositories 7.1。核心概念 7.2。查询方法 7.3。定义存储库接口 7.3.1。微调储存库定义 7.3.2。空处理存储库方法 7.3.3。将存储库与多个Spring Data模块一起使用 7.4。定义查询方法 7.4.1。查询查询策略 7.4.2。查询创建 7.4.3。属性表达式 7.4.4。特殊参数处理 7.4.5。限制查询结果 7.4.6。流式查询结果 7.4.7。异步查询结果 7.5。创建存储库实例 7.5.1。XML配置 7.5.2。JavaConfig 7.5.3。独立使用 7.6。Spring Data存储库的自定义实现 7.6.1。定制个人存储库 7.6.2。自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例存储库 9.3。用Spring连接到MongoDB 9.3.1。使用基于Java的元数据注册Mongo实例 9.3.2。使用基于XML的元数据注册Mongo实例 9.3.3MongoDbFactory接口 9.3.4。使用基于Java的元数据注册MongoDbFactory实例 9.3.5。使用基于XML的元数据注册MongoDbFactory实例 9.4。MongoTemplate简介 9.4.1。实例化MongoTemplate 9.4.2。WriteResultChecking策略 9.4.3。WriteConcern 9.4.4。WriteConcernResolver 9.5。保存,更新和删除文档 9.5.1。如何_id在映射图层中处理该字段 9.5.2。类型映射 9.5.3。保存和插入文件的方法 9.5.4。更新集合中的文档 9.5.5。在集合中插入文档 9.5.6。在集合中查找和插入文档 9.5.7。删除文件的方法 9.5.8。乐观锁定 9.6。查询文件 9.6.1。查询集合中的文档 9.6.2。查询文件的方法 9.6.3。查询不同的值 9.6.4。地理空间查询 9.6.5。GeoJSON支持 9.6.6。全文查询 9.6.7。排序规则 9.6.8。JSON模式 9.6.9。流利的模板API 9.7。按实例查询 9.7.1。介绍 9.7.2。用法 9.7.3。示例匹配器 9.7.4。执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影表达式 9.11.4。分面分类 9.12。用自定义转换器覆盖默认映射 9.12.1。使用已注册的Spring Converter进行保存 9.12.2。使用Spring转换器读取 9.12.3。使用MongoConverter注册Spring转换器 9.12.4。转换器消除歧义 9.13。索引和集合管理 9.13.1。创建索引的方法 9.13.2。访问索引信息 9.13.3。使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams Driver连接到MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值