【一】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