Mongodb部署记录[1]--安装部署+慢查询索引添加

本文详细介绍了MongoDB的安装配置过程,包括权限管理、慢查询优化、索引创建等内容,并提供了实用的命令示例。

【一】Mongodb安装

[1]mongodb三要素:数据库,集合(表),文档(行)

mkdir -p /app/mongodb/{log,db,install}
cd /app/mongodb/install/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.16.tgz
tar zxvf mongodb-linux-x86_64-3.2.16.tgz
mv mongodb-linux-x86_64-3.2.16 ../mongodb

[2]配置文件:

cat >/app/mongodb/mongodb/mongodb.conf<<EOF
dbpath=/app/mongodb/db
logpath=/app/mongodb/log/mongodb.log
port=27017
fork=true
nohttpinterface=true #关闭http web 20718端口访问
bind_ip = 0.0.0.0
#storageEngine=mmapv1#采用mmapv1引擎。
#auth=true #开启验证功能
EOF
添加变量:
PATH=$PATH:/app/mongodb/mongodb/bin
export PATH
source /etc/profile
启动
mongod -f /app/mongodb/mongodb/mongodb.conf 
关闭
kill -2 `ps -ef|grep mongod|awk 'NR==1{print $2}'`
或者
mongod  --shutdown  --dbpath /app/mongodb/db
或者
use admin;
db.shutdownServer();

【二】Mongodb权限

数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system

[1].创建 用户管理员角色:userAdminAnyDatabase (用于管理账号)

admin用户用于管理账号,不能进行关闭数据库等操作,目标数据库是admin
use admin
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})#role:指定账户管理员userAdminAnyDatabase
#设置数据库验证:
db.auth(admin,123456) 设置数据库连接验证

[2].创建一个超级管理员roles角色:root;用于管理数据库,关闭数据库

root角色用于 关闭数据库 db.shutdownServer()
use admin
db.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
db.auth(root,123456) 设置数据库连接验证

[3].创建用户自己的数据库的角色。普通私有库管理员:role指定dbOwner
可以为自己的数据库创建用户,注意创建普通用户切换到对应的库创建。    

use position
db.createUser({user: "wyl",pwd: "123456",roles: [ { role: "dbOwner", db: "position" } ]})
db.auth(wyl,123456) 设置数据库连接验证

[4].查看用户

创建完或者删完用户,可以查看当前的用户列表
db.system.users.find()
或者
show users

[5].认证用户

use test
> db.auth(用户名,密码); #注意是以库为单位,必须先选择库;
#在自己的库下创建用户后,需要认证,否则登录自己库后也没有权限进行操作

[6].删除用户

删除用户必须由账号管理员来删,所以,切换到admin角色
use admin
db.auth("admin","123456")#认证
删除单个用户
db.system.users.remove({user:"XXXXXX"})
删除所有用户
db.system.users.remove({})
删除普通用户
 use test
db.dropUser('用户名');

[7].修改用户密码

> use test
> db.changeUserPassword(用户名, 新密码);
# 修改密码和用户信息
db.runCommand(
  {
    updateUser:"username",
    pwd:"xxx",
    customData:{title:"xxx"}
  }
)

[8].开启认证

killall mongod
echo "auth=true" >>/app/mongodb/mongodb/mongodb.conf
mongod -f /app/mongodb/mongodb/mongodb.conf

[9].登录命令

mongo --port 27017 -u "admin" -p "123456" --authenticationDatabase "admin"#必须制定admin库用于管理用户
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"#必须制定admin库用于管理数据库
简写如下:
mongo 192.168.0.12:27017/admin -uroot -p123456

[10].导出库

mongodump -host192.168.0.14:27017 -uroot -p123456 --authenticationDatabase admin -o /home/
-o指定备份路径
-d 数据库名称
导出指定库
mongodump -host192.168.0.14:27017 -uroot -p123456 --authenticationDatabase admin -d databasename -o /home/

[11].还原库

还原所有库
mongorestore -uroot -p123456 ./dump/
指定库还原#tank这个数据库的备份路径
mongorestore -uroot -p123456  /home/zhangy/mongodb/tank

【三】Mongodb慢查询 

[1]Mongodb慢查询默认慢查询300毫秒

启动mongodb指定参数:
mongod --profile 1 --slowms100  

或命令行执行:
db.setProfilingLevel(0)#临时关闭
db.system.profile.drop()#删除记录
db.createCollection( "system.profile", { capped: true, size:4000000 } )#配置size大小
db.setProfilingLevel(1,200)##1表示level,200表示慢查询时间(ms),也可以省略时间设置
db.getProfilingStatus()             #查询当前慢查询的状态信息
注:0代表关闭,1代表只记录slowlog,2代表记录所有操作,这里设置成了200,即200ms。

[2]Mongo Profile慢查询记录直接记录在db中,记录位置是当前开启Profile功能的库下的system.profile集合中,所以只需要直接查询这个集合就行
查询执行时间大于200ms的Profile记录:

> db.system.profile.find( { millis : { $gt : 5 } } )
查看最近的10条记录
>db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()
查看关于某个collection的相关慢查询操作:
>db.system.profile.find({ns:'mydb.table1'}).pretty()
对单挑语句进行分析进行性能分析
db.wyl_test.find({"age":999999}).explain(true)
executionTimeMillis:执行花费的时间单位毫秒
nReturned:查询结果的返回条目
totalKeysExamined:索引扫描条目
totalDocsExamined:文档扫描条目
stage:COLLSCAN 全表扫描,IXSCAN:索引扫描
注:查询语句理想的条目:
nReturned=totalKeysExamined=totalDocsExamined;三值相同

【四】Mongodb添加索引

use wyl
for(i=1;i<1000000;i++){db.wyl_test.insert({"name":"i"+1,"age":i+10})}#创建测试数据
db.wyl_test.find({"age":999999}).explain(true)#查看
关注项:
executionTimeMillis:执行花费的时间
nReturned:查询结果的返回条目
totalKeysExamined:索引扫描条目
totalDocsExamined:文档扫描条目
stage:COLLSCAN 全表扫描,IXSCAN:索引扫描
注:查询语句理想的条目:nReturned=totalKeysExamined=totalDocsExamined;三值相同

 [1]普通索引:

db.wyl_test.ensureIndex({age:1}) #在字段age上创建升序索引;1代表升序,-1代表降序。
db.wyl_test.find({"age":999999}).explain(true)#再次查看
添加索引非常耗时可放到后台添加:db.wyl_test.ensureIndex({age:1} ,{backgroud:true})
查看当前表中所有索引:db.wyltest.getIndexes()
查看数据库中所有索引db.system.indexes.find()

[2]复合索引:

当创建组合索引时,字段后面的1 表示升序,-1 表示降序,是用1 还是用-1 主要是跟排序的时候或指定范围内查询 的时候有关的。
db.wyltest.ensureIndex({"age":1,"name":1})
db.wyltest.ensureIndex({"age":1,"name":-1})
db.wyltest.ensureIndex({"name":1,"age":-1})

[3]删除索引:

不再需要的索引,我们可以将其删除,mongodb提供两种删除索引的方法:
dropIndex()方法用于删除指定的索引
dropIndexes()方法用于删除全部的索引
db.users.dropIndex("name_1")
db.users.dropIndex("name_1_age_1")
db.users.dropIndexes()
参考百度搜索mongodb运维
慢查询:
https://www.cnblogs.com/nixi8/p/4849314.html?tdsourcetag=s_pcqq_aiomsg 
https://www.cnblogs.com/kevingrace/p/8184087.html
https://www.cnblogs.com/zhang-ke/p/7804007.html
https://blog.youkuaiyun.com/wmj2004/article/details/79415892
索引:https://blog.51cto.com/chenql/2071267
数据备份脚本:  https://gitee.com/passer/mongodb_backup_script
慢查询监控脚本:https://blog.youkuaiyun.com/wmj2004/article/details/79415892

转载于:https://my.oschina.net/wangyunlong/blog/3029216

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值