基于 mongdb3.2版本 问题及总结

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 本文是基于 3.2 版本 的命令行配置 的说明总结 mongod.lock 再次打开mongdb,若数据库出现如不能连上,提示***.lock,则是一个data目录下的mongod.lock文件的问题, 可以用如下的修复的命令, mongod --repair 查看查询效率 查看查询效率时使用explain();里面可以看到是否使用了索引查询,使用了什么索引,及查询耗时等属性

本文是基于 3.2 版本 的命令行配置 的说明总结

mongod.lock

再次打开mongdb,若数据库出现如不能连上,提示***.lock,则是一个data目录下的mongod.lock文件的问题,

可以用如下的修复的命令, mongod --repair

查看查询效率

查看查询效率时使用explain();里面可以看到是否使用了索引查询,使用了什么索引,及查询耗时等属性。在2.6版本以前可以直接使用explain();就能查到以上

但是2.6版本以后再命令行要加上一些参数才能看到,如加上executionStats才能看到查询耗时。如:db.p.find({"name":"lhy"+10000}).explain("executionStats")

 

 

MongoDb的“not master and slaveok=false”错误及解决方法

在SECONDARY查询出发现如下错误:

SECONDARY> show collections;
Sat Aug  4 15:29:00 uncaught exception: error: { "$err" :"not master and slaveok=false", "code" : 13435 }

这是正常的,因为SECONDARY是不允许读写的,如果非要解决,方法如下:

SECONDARY>rs.slaveOk();

 

 


 

 

主从服务器问题

主服务器可以增删改查,从服务器可以查,但是不能增删改,而且还必须使用rs.slaveOk();命令后才可以查,也就是从服务器只管备份。

 

副本集问题

注意一点,要想使用副本集,从的mongodb的数据必须都是空的,要不然执行 rs.initiate()命令时会提示因存在数据而导致初始化不成功(hasdata already, cannot initiate set)。


副本集  和主从服务器差不多,只不过有一些区别:(此集群分为三种,主服务器,从服务器,仲裁服务器,其中仲裁服务器只有选举权,没有成为主服务器的权利)

<1>: 该集群没有特定的主数据库。

 <2>: 如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能,很牛X的啊。


 切片技术问题


切片技术,也是一种集群,只不过,它可以把一个集合或者数据库,分别放在多台的服务器上,需要指定切片位置(即在哪个字段上进行分片),没有指定的文档就不会分片

①   :开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。

 ②:指定集合中分片的片键,这里我就指定为person.name字段。

 

注意分片技术使用,db.printSharedingStatus()查看分片情况时。出现        "errmsg" : "Surprised todiscover that 127.0.0.1:2222 does not believe it is a config server",

是因为    db.printSharedingStatus()命令必须在config(配置服务器上执行),

而且必须在adminmongo 127.0.0.1:2222/admin)集合下执行

 

 

 HotfixKB2731284 or later update is not installed


注意下次开机后,直接输入mongo会报HotfixKB2731284 or later update is not installed错误,此时要在启动参数上指定路径

如 mongod  --dbpath=E:\MongoDB\Server\3.2\data 

 



添加用户并授予权限问题

创建用户并授权(2.6版本以前使用addUser()添加用户,2.版本以后不再使用addUser(),而是使用db.createUser

例子:注意在哪个数据库下,添加的用户就是在哪个数据库下。

进入到数据库lhy

use lhy

添加用户权限 读写权限

db.createUser({user:’lhy,pwd:’123′, roles:[ { role: " readWrite" }]})
注意下在admin数据库中,添加的用户,并指定可以访问的数据库lhy1如roles: [ { role: "userAdminAnyDatabase", db: "lhy1" }
只在lhy1中能使用,db.createUser({user:’lhy,pwd:’123′, roles:[“root”]})则相当于添加了一个超级管理员,注意,在admin中添加的超级管理员,只能在admin中认证成功,其他数据库中认证不了,这点很是奇怪,但是只要在admin中认证成功就可以进入其他数据库,进行操作。
而在普通数据库如lhy下面添加的用户,只能在lhy下面使用,不管{ role: " readWrite ", db: "lhy1" }的db是谁,都不会生效。
以下是系统默认角色

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

 

修改用户权限

db.grantRolesToUser(“lhy”,["readWrite" , { role: "read", db: "stock" } ])

重新启动开启认证

mongod –auth –dbpath E:\MongoDB\Server\3.2\data

启动后,再添加修改用户无需再重启

登录时,进入到相应的数据库,(注意,在哪个数据库中添加的账户只能在哪个数据进行认证,admin也不例外)

db.auth(“lhy”,”123456”);

 

全文检索

MongoDB 2.6版本以后是默认开启全文检索的,如果你使用之前的版本,你需要使用以下代码来启用全文检索:

>db.adminCommand({setParameter:true,textSearchEnabled:true})

或者使用命令:

mongod --setParameter textSearchEnabled=true


创建全文索引

考虑以下 posts集合的文档数据,包含了文章内容(post_text)及标签(tags)

post_text字段建立全文索引,这样我们可以搜索文章内的内容:

注意username是字段名 text是设置全文索引

>db.lhy.ensureIndex({username:"text"})

关键字查询

>db.lhy.find({$text:{$search:"love"}})

如果你使用的是旧版本的MongoDB,你可以使用以下命令:

>db.posts.runCommand("text",{search:" w3cschool.cc"})

使用全文索引可以提高搜索效率。

删除已存在的全文索引,可以使用 find命令查找索引名:

>db.posts.getIndexes()

执行以下命令来删除索引:

>db.posts.dropIndex("username")

 


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
5月前
|
NoSQL Go 网络安全
`MONGDB` 安装与使用
`MONGDB` 安装与使用
|
9月前
|
存储 JSON NoSQL
一.MongoDB入门-MongDB介绍和安装
MongoDB入门-MongDB介绍和安装
|
9月前
|
存储 JSON NoSQL
MongoDB入门-MongDB介绍和安装
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
499 1
|
3月前
|
存储 人工智能 NoSQL
MongoDB 7.0新功能
MongoDB 7.0新功能
150 0
|
8月前
|
存储 NoSQL Linux
mongdb安装笔记
mongdb安装笔记
59 1
|
7月前
|
SQL 运维 NoSQL
MongoDB 6.0.3版本Balancer改动
Balancer不再执行自动分割,chunk无法作为数据均衡判断依据
|
8月前
|
数据库 Docker 容器
mongdb的安装
mongdb的安装
34 0
|
NoSQL 关系型数据库 MySQL
Laravel框架使用MongoDB遇到的问题解决
Laravel框架使用MongoDB遇到的问题解决
95 0
|
存储 NoSQL MongoDB
MongDB安装
MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center#community
134 0
MongDB安装
|
存储 NoSQL MongoDB
MongoDB系统库
本文基于MongoDB社区版 3.4.21、3.6.12、4.0.11,WT引擎,主要是对单节点、副本集、分片的系统库的介绍。
2240 0