用户管理
权限介绍
admin 角色
readWriteAnyDatabase
readAnyDatabase
dbAdminAnyDatabase
clusterMonitor
cleanupOrphaned
enableSharding
flushRouterConfig
moveChunk
viewUser
readWriteAnyDatabase 角色
readWriteAnyDatabase
readAnyDatabase
readAnyDatabase
角色
角色定义特定动作(find,insert,dbStats,collStats,compact)、资源(db,collection)以及继承内建角色
actions
resources
Inherits built-in roles
创建用户
admin用户
use admin;
db.createUser({
user:'admin',pwd:'Admin@01',
roles:[
{role:'clusterAdmin',db:'admin'},
{role:'userAdminAnyDatabase',db:'admin'},
{role:'dbAdminAnyDatabase',db:'admin'},
{role:'readWriteAnyDatabase',db:'admin'}
]});
普通读写用户
#test库添加用户
use test
db.createUser(
{
user: "user01",
pwd: "user01",
roles: [ { role: "readWrite" , db: "test" } ]
}
)
删除用户
--db.dropUser(“admin”)
删除当前库的所有用户
--db.dropAllUser()
版本升级兼容设置
完成集群升级后,需要设置feature到正确版本,否则容易遇到兼容性问题(各种莫名奇妙的报错)
升级检查
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
设置兼容性
db.adminCommand( { setFeatureCompatibilityVersion: "X.X" } )
数据导入导出
数据导入
mongoimport
恢复json格式表数据到collection
mongoimport -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname /mongodb/collectionname.json
csv格式的文件头行,有列名字
mongoimport -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname --type=csv --headerline --file /mongodb/collectionname.csv
没有列名字
mongoimport -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname --type=csv -f id,name,age,date --file /mongodb/log.csv
数据导出
mongodump
全库导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -o /path/backup
单库导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -d dbname -o /path/backup/
集合导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -d dbname -c collectionname -o /path/backup/
mongoexport
默认导出了JSON格式的数据
mongoexport -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname -o /mongodb/collectionname.json
导出CSV格式的数据
mongoexport -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname --type=csv -f col1,col2,col3,col4 -o /mongodb/collectionname.csv
备份恢复
备份
全库导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -o /path/backup
单库导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -d dbname -o /path/backup/
集合导出
mongodump -uusername -ppassword --port 27017 --authenticationDatabase dbname -d dbname -c collectionname -o /path/backup/
物理/文件系统备份
secondary节点执行复制MongoDB的底层数据文件来创建MongoDB部署的备份
恢复
oplog一致点恢复
mongodump --port 27017 --oplog -o /path/backup
恢复库
mongorestore -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname /path/backup/dbname
恢复集合
mongorestore -uusername -ppassword --port 27017 --authenticationDatabase admin -d dbname -c collectionname --gzip /path/backup.bak/dbname/collectionname.bson.gz
集群管理
副本集初始化
mongo --port 27100 --host 127.0.0.1
cfg={
_id:"configReplSet",
configsvr: true,
members:[
{_id:0, host:'192.168.0.221:27100'},
{_id:1, host:'192.168.0.222:27100'},
{_id:2, host:'192.168.0.223:27100'}
]};
rs.initiate(cfg);
rs.status()
添删副本节点
添加副本
rs.add ({"_id":4,"host""192.168.0.224:27017","priority":1.5})
rs.addArb("192.168.0.225:22017")
删除副本
rs.remove("192.168.0.224:27017")
添加分片
登录mongos实例,执行添加shard分片操作
mongo --port 27000 --host 127.0.0.1
sh.addShard("shard1/192.168.0.221:27017");
删除分片
查询primary shard为待删除shard上的collections
use config
db.databases.find()
db.runCommand({“moveprimary”:“collectionname”,“to”:“shard1”})
删除shard
db.runCommand( {removeshard:“shard7”} )
数据分片激活
激活Shard Database
sh.enableSharding("dbname")
激活Shard Collection
sh.shardCollection("dbname.collectionname", {shardkey:1});
分片标签
全球多写/数据区域
配置Shard Database
sh.enableSharding("dbname")
配置Shard Collection
sh.shardCollection("dbname.collectionname", {shardkey:1});
先把Tag和Shard关联
sh.addShardTag("shardname", "tagname")
为Tag分配shard key
sh.addTagRange("tdbname.collectionname", {shardkey:MinKey}, {shardkey:MaxKey}, "tagname")
查看chunk分布
use config
db.chunks.find({ns: "dbname.collectioname"}, {shardname, _id:0}).sort({shard:1})
调整balance时间窗口
sh.getBalancerState();
use config;
db.settings.update(
{ _id: "balancer" },
{ $set: { activeWindow : { start : "18", stop : "19" } } },
{ upsert: true }
)
监控
设置和查看慢查询
启动参数设置
operationProfiling:
slowOpThresholdMs: 100
mode: "slowOp"
或者命令开启
db.setProfilingLevel(1,100)
db.getProfilingStatus() #查看
慢查询捕捉
use admin;
db.system.profile.find({'op':'query'},{'op':1,'ns':1,'millis':1,'ts':1})
db.system.profile.findone({'op':'query'})
查看最近慢日志
db.system.profile.find().sort({$natrual: -1})
状态监控
db.serverStatus()
诊断日志
{timestamp} {severity} {component} [{context}] {message}
查看mongod进程输出日志,需要注意
用于troubleshooting的日志关键字
planSummary: COLLSCAN
FAILURE
index build
failed
Slow query
会话监控
查看当前执行长SQL(运行10S)
db.currentOp({"ns" : "XXXX","secs_running":{$gt:10}})
db.killOp(665906581)
锁等待
db.adminCommand(
{
currentOp: true,
"waitingForLock" : true,
$or: [
{ "op" : { "$in" : [ "insert", "update", "remove" ] } },
{ "query.findandmodify": { $exists: true } }
]
}
)
正在执行的操作
db.adminCommand(
{
currentOp: true,
"active" : true,
"numYields" : 0,
"waitingForLock" : false
}
)
库慢操作
db.adminCommand(
{
currentOp: true,
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
当前正在创建索引
db.adminCommand(
{
currentOp: true,
$or: [
{ op: "command", "query.createIndexes": { $exists: true } },
{ op: "none", ns: /\.system\.indexes\b/ }
]
}
)




