参考文档:MongoDB 教程 MongoDB 3.4 中文文档
- 客户端驱动版本和服务器驱动版本要一致,要不然会报错误:Connection reset by peer。参考: MongoDB错误和使用总结2013-02-16(持续更新) java.net.SocketException四大异常解决方案
- mongodb添加用户
#管理员root账户
db.createUser({user: "root",pwd: "123456",roles: [ "root", "userAdminAnyDatabase", "userAdmin", "dbOwner" ]})
#ops manager的数据库用户
db.createUser({user: "mongodbms",pwd: "123456",roles: [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterMonitor" ]})
#为test库添加读写权限的用户
db.createUser({
user: "user1",
pwd: "123456",
roles: [ { role: "readWrite", db: "test" } ]
})
注意使用db.auth()时,用户名密码都需要用引号引起来。
mongodb内置角色:Built-In Roles
- mongodb中replica set的主备切换
- 首先排除不需要竞选primary的secondary实例,进入不需要竞选的实例(mongod实例)中,执行如下命令
#冰冻此mongod实例,60秒内不参加内部选举工作
myShard_0:SECONDARY> rs.freeze(60)
- shutdown此rs的primary节点
myShard_0:PRIMARY> rs.stepDown(15)
执行完成之后,会报错重连,此时连接后的状态就是SECONDARY了,等待选出primary节点即可。
参考:mongodb 复制集主节点切换方法
- mongodb中查看每一条记录的执行时间
- 在shard的primary节点中运行
#获得当前profile的设置
db.getProfilingLevel()
#不记录操作耗时
db.setProfilingLevel(0)
#记录慢查询(耗时大于100ms的操作)
db.setProfilingLevel(1)
#记录所有的操作
db.setProfilingLevel(2)
- 运行完成之后,查看操作耗时
#查询耗时大于500的操作
db.system.profile.find({millis:{$gt:500}})
参考:mongodb可以通过profile来监控数据 (mongodb性能优化)
- 从mongo的安装可以知道,mongo命令主要有mongod:启动集群实例,mongos:启动管理客户端连接的实例,mongo:进入mongo的命令行。
- 在mongodb的shard集群中,基于2dsphere,没法在find命令中使用:db.sz_user({loc:{$near:{……}}),这是mongodb的一个bug,会报错:use geoNear command rather than $near query,但是在非shard集群中是可以在find中使用$near。shard集群中使用runCommand是可以的,但是runCommand在高并发时,会停顿几秒,使用db.sz_user.aggregate($geoNear)能解决此问题。所以一句话,在shard集群中,$near没法用,runCommand高并发性能有问题,$geoNear才能完美解决此问题。
参考:MongoDB geospatial query with find() - 如果mongodb集群开启了shard,大量插入数据的时候,有可能trunks分配不是很均衡,但是等集群空闲的时候,会自动均衡所有的trunks。