欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB 安装学习笔记

程序员文章站 2024-01-23 10:11:10
...

1、 MongoDB 安装

windows 下安装

  1. 在官网下载安装文件文件 https://www.mongodb.com/download-center#community
  2. 将文件安装在D盘(D:\Program Files\MongoDB)或其他盘符下。
  3. 在D盘下创建文件夹 D:\DATA\MongoDB(任意)
  4. 配置环境变量;将D:\Program Files\MongoDB\Server\3.0\bin 加入到 path
  5. 进入cmd, 输入 mongod --dbpath D:\DATA\MongoDB ,出现以下界面,数据库安装成功
    MongoDB 安装学习笔记

Linux下安装

1、 下载数据库文件

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    

2、 解压

tar -zxvf mongodb-linux-x86_64-3.0.6.tgz      

3、 将文件夹移动至usr

mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

4、MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(–dbpath)。

mkdir -p /data/db

注意:如果你的数据库目录不是/data/db,可以通过 –dbpath 来指定。

MongoDB web界面

MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 –rest 。
注意:该功能只适用于 MongoDB 3.2 及之前的早期版本

$ ./mongod --dbpath=/data/db --rest

MongoDB 的 Web 界面访问端口比服务的端口多1000。

如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017

2、 MongoDB 指令

进入MongoDB安装目录/bin
- 启动数据库 ./mongod --dbpath=/data/db
- 进入数据库 ./mongo
- show dbs 查看数据库
- use [dbname] 使用数据库,没有数据库时,创建该数据库(如果不进行数据操作则不创建)
- show collections 查看集合
- db.collection.find() 查询集合中的数据 – find({'name':'panlei'}) 条件查询
find().count()集合总数
find().skip(3).limit(2).sort({'id':1}) 跳过3条,限制2条,根据id排序
- 更新操作
db.collection.update({'id':'1'},{'id':'2'}) 更新操作
前面为条件, 默认情况下,后面为全部替换
update({'id':'1'},{$set:{'id':'22'}}) $set 为部分更新
update({'id':'1'},{$set:{'id':'22'}},ture) 有就更新,没有就插入
注意:更新操作默认更新第一条符合条件的记录
更新全部符合条件的数据时:update({'id':'1'},{$set:{'id':'22'}},false,true)
- 删除数据
remove() 方法
db.collection.drop() 删除集合
- 索引
db.collection.getIndexes() 查看集合中索引情况
db.collection.ensureIndex({'name':1}) 创建索引 1:正向 2:逆向
db.collection.ensureIndex({'title':1},{'name':'title_index'}) 创建索引,并命名
db.collection.dropIndex("title_index") 删除索引
db.collection.ensureIndex({'name':1,'y':1}) 复合索引
db.collection.ensureIndex({'name':1},{expireAfterSeconds:10}) 过期索引

  • 过期索引表示数据在一段时间后过期,数据类型必须为ISODate 或ISODate数组, 该字段的时间过期,表示整条数据都会消失
  • 过期时间索引不能是复合索引
  • 如果过期时间索引是时间数组,则按照最小时间(最早达成条件)
  • 删除时间不是精确的

db.collection.ensureIndex({'name':'text','y':'text'}) 创建全文索引
db.collection.ensureIndex({'$**':'text'}) 为集合中所有字段添加全文索引
db.collection.find({$text:{$search:'panlei'}}) 使用全文索引查询
db.collection.find({$text:{$search:['aa bb cc']}}) 或查询
db.collection.find({$text:{$search:['aa bb -cc']}}) 不包含cc 的
db.news.find({$text:{$search:"\"wangyan\" \"wangying\""}}) 与查询(不可用单引号)
db.collections.find({$text:{$search:"wangyan"}},{"score":{$meta:"textScore"}}).sort({$meta:"textScore"}) 根据相似度查询

db.collection.ensureIndex({},{'unique':true}) 创建唯一索引
db.collection.ensureIndex({},{'sparse':true}) 创建稀疏索引
默认是false, 当不存在key 时也会重建索引
注意: 当强制使用稀疏索引判断key 是否存在时会出现异常数据
比如 db.collection.find({'title':{$exists:false}}).hint("index")

地理位置索引
db.locations.ensureIndex({"position":"2d"}) 创建2d索引
经纬度:[经度,纬度]
db.locations.find({'position':{$near:[1,1]}}) 找出附近的100个点
db.locations.find({'position':{$near:[1,1],$maxDistance:10}}) 查找距离小于10的点

3、MongoDB 监控

使用mongostat 效果验证 ./mongostat -h 127.0.0.1:27017
MongoDB 安装学习笔记
各字段解释说明:
insert/s : 官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作
query/s : 每秒的查询操作次数
update/s : 每秒的更新操作次数
delete/s : 每秒的删除操作次数
getmore/s: 每秒查询cursor(游标)时的getmore操作数
command: 每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分表代表 本地|复制 命令
注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大)
dirty: 仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比
used:仅仅针对WiredTiger引擎,官网解释是正在使用中的缓存百分比
flushes:
For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间
For MMAPv1 引擎:每秒执行fsync将数据写入硬盘的次数
注:一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了
vsize: 虚拟内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
res: 物理内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存

qr: 客户端等待从MongoDB实例读数据的队列长度
qw:客户端等待从MongoDB实例写入数据的队列长度
ar: 执行读操作的活跃客户端数量
aw: 执行写操作的活客户端数量
注:如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了
netIn:MongoDB实例的网络进流量
netOut:MongoDB实例的网络出流量
注:此两项字段表名网络带宽压力,一般情况下,不会成为瓶颈
conn: 打开连接的总数,是qr,qw,ar,aw的总和
注:MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数,maxIncomingConnections,阿里工程师建议在5000以下,基本满足多数场景

在每个find()查询后面添加explain() 获取查询详细信息参数

4、MongoDB 安全

mongodb 守护进程方式关闭

ps -ef|grep mongod|grep 27017
root       5435   4914  1 19:13 pts/2    00:00:14 mongod --dbpath=/data/mongodata/rs1 --logpath=/data/mongodata/rs1/rs1.log

kill -2 5435

mongod.conf 配置文件

# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

bind_ip = 127.0.0.1
port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

# Enables periodic logging of CPU utilization and I/O wait
#cpu = true

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true
# Verbose logging output.
#verbose = true

# Inspect all client data for validity on receipt (useful for
# developing drivers)
#objcheck = true

# Enable db quota management
#quota = true

# Set oplogging level where n is
#   0=off (default)
#   1=W
#   2=R
#   3=both
#   7=W+some reads
#oplog = 0
# Diagnostic/debugging option
#nocursors = true

# Ignore query hints
#nohints = true

# Disable the HTTP interface (Defaults to localhost:27018).
#nohttpinterface = true

# Turns off server-side scripting.  This will result in greatly limited
# functionality
#noscripting = true

# Turns off table scans.  Any query that would do a table scan fails.
#notablescan = true

# Disable data file preallocation.
#noprealloc = true

# Specify .ns file size for new databases.
# nssize = <size>
# Accout token for Mongo monitoring server.
#mms-token = <token>

# Server name for Mongo monitoring server.
#mms-name = <server-name>

# Ping interval for Mongo monitoring server.
#mms-interval = <seconds>

# Replication Options

# in replicated mongo databases, specify here whether this is a slave or master
#slave = true
#source = master.example.com
# Slave only: specify a single database to replicate
#only = master.example.com
# or
#master = true
#source = slave.example.com
# Address of a server to pair with.
#pairwith = <server:port>
# Address of arbiter server.
#arbiter = <server:port>
# Automatically resync if slave data is stale
#autoresync
# Custom size for replication operation log.
#oplogSize = <MB>
# Size limit for in-memory storage of op ids.
#opIdMem = <bytes>

# SSL options
# Enable SSL on normal ports
#sslOnNormalPorts = true
# SSL Key file and password
#sslPEMKeyFile = /etc/ssl/mongodb.pem
#sslPEMKeyPassword = pass

./mongod --config ../conf/mongod.conf 以配置文件方式启动

创建用户信息

db.createUser(
  {
    user: "panlei",
    pwd: "panlei",
    roles: [ { role: "dbAdmin", db: "test" } ]
  }
)

角色介绍

roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
复制代码
具体角色:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限