暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongodb日常操作

原创 zhou 2024-03-01
212

用户管理

权限介绍

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/ }
      ]
    }
)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论