mongodb导数 mongodump --host $IP:$PORT -u xxx -p xxx --numParallelCollections=8
--authenticationDatabase=admin --gzip --oplog -o $MONGO_DATA 1. directory
如果指定参数directoryperdb =yes,则会每个db一个目录。其中包含该db的所有数据文件 directoryPerDB: true > show
databases; admin 0.000GB local 0.009GB test 0.000GB > exit bye $ls admin test
local mongod.lock sizeStorer.wt WiredTiger.basecfg WiredTiger.lock mongodb 文档
document/ 集合 collection/ 数据库 database 2.mongdb自带监控工具 >> mongostat --host
主机名:端口号 --username=xxx --password=xxxx --authenticationDatabase=admin insert
query update delete getmore command dirty used flushes vsize res qrw arw net_in
net_out conn set repl time *0 3 *0 *0 0 3|0 0.0% 80.0% 0 262G 201G 0|0 0|0
3.12k 51.2k 125 test222 PRI Dec 26 19:50:53.200 *0 34 *0 *0 0 3|0 0.0% 80.0% 0
262G 201G 0|0 1|0 28.5k 58.1k 125 test222 PRI Dec 26 19:50:54.200 *0 8 *0 *0 0
1|0 0.0% 80.0% 0 262G 201G 0|0 0|0 7.30k 54.1k 125 test222 PRI Dec 26
19:50:55.202 *0 16 *0 *0 2 7|0 0.0% 80.0% 0 262G 201G 0|0 0|0 15.1k 57.9k 125
test222 PRI Dec 26 19:50:56.199 *0 26 *0 *0 0 1|0 0.0% 80.0% 0 262G 201G 0|0
0|0 19.8k 54.6k 125 test222 PRI Dec 26 19:50:57.199 *0 30 *0 *0 0 2|0 0.0%
80.0% 1 262G 201G 0|0 0|0 24.4k 57.4k 125 test222 PRI Dec 26 19:50:58.199 $
mongotop --host 主机名:端口号 -u=xxx -p=xxx --authenticationDatabase=admin
2017-12-26T19:53:12.912+0800 connected to: 主机名:端口号 ns total read write
2017-12-26T19:53:13+08:00 local.oplog.rs 1ms 1ms 0ms admin.system.profile 0ms
0ms 0ms admin.system.roles 0ms 0ms 0ms admin.system.users 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms 3.mongdb投票 Hidden:不会被选举为primary,对于client
application是不可见的,具有投票权
Priority:成为primary的优先值,priority越高,成为primary的可能性越高。数值范围:0—100,=0表示不可能成为primary,也不会触发election
Voting:投票的权值,=0表示该节点没有投票的权利 Arbiter:仲裁节点,具有投票权,没有复制数据 4.读写模式
primary:主节点,默认读操作只在主节点,如果主节点不可用,报错或者抛出异常。
primaryPreferred:首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点
secondary:从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常
secondaryPreferred:首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点
nearest:最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。 --邻近的判断标准为client对各台匹配要求的主机进行ping,最快响应的则最近
5.复制 oplog > show dbs admin 0.000GB gcrm 1445.183GB local 25.243GB test 0.000GB
> use local switched to db local > show collections; me oplog.rs
replset.election replset.minvalid startup_log system.profile system.replset >
db.oplog.rs.find() { "ts" : Timestamp(1513290869, 119), "t" : NumberLong(0),
"h" : NumberLong("-164732681870941527"), "v" : 2, "op" : "d", "ns" : "xxxx",
"fromMigrate" : true, "o" : { "_id" : ObjectId("xxxx") } } ts:8字节的时间戳,由4字节unix
timestamp +
4字节自增计数表示。这个值很重要,在选举(如老primary宕机时)新primary时,会选择ts最大的那个secondary作为新primary。
op:1字节的操作类型,例如i表示insert,d表示delete。 ns:操作所在的namespace。
o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值) o2: 在执行更新操作时的条件,仅限于update时才有该属性。
其中op,可以是如下几种情形之一: “i”: insert “u”: update “d”: delete “c”: db cmd 6.查看oplog状态 >
db.printReplicationInfo() configured oplog size: 200000MB log length start to
end: 1001366secs (278.16hrs) oplog first event time: Fri Dec 15 2017 06:34:29
GMT+0800 (CST) oplog last event time: Tue Dec 26 2017 20:43:55 GMT+0800 (CST)
now: Tue Dec 26 2017 20:44:03 GMT+0800 (CST) 说明:oplog
使用size约为200000MB。第一个操作发生时间为Fri Dec 15 2017 06:34:29 ;最后一个操作发生时间为Tue Dec 26 2017
20:43:55 。存储了1001366秒的数据(1077.06hrs) > db.oplog.rs.stats() 7.查看主从延迟 >
db.printSlaveReplicationInfo() source: 10.33.57.174:24000 syncedTo: Tue Dec 26
2017 20:53:05 GMT+0800 (CST) 0 secs (0 hrs) behind the primary 8.查看分片状态 mongos>
db.mongos.find()db.mongos.find() mongos> db.stats()db.stats() --mongodb分区
mongos> db.databases.find()db.databases.find() 9.分片 --mongodbs缩减集群容量 1)
确认是否为database的primary shard,是,则需移除 use admin;
db.runCommand({movePrimary:"xx",to:"xxx"}) 2) 设置balancer为true use admin;
sh.setBalancerState(true) 3) 移除分片 use admin; db.runCommand({removeShard:"s3"})
--DATABASE设置分片 设置: use admin; sh.enableSharding(“zydb”); 检查: use config;
db.databases.find( { "partitioned": true } ) 或 use zydb; db.stats() 10.
mongoDB数据块均衡 检查balancer设置:sh.getBalancerState()
激活balancer:sh.setBalancerState(true) 禁止balancer:sh.setBalancerState(false)
检查当前balancer是否正在均衡: use config; db.locks.find( { _id : "balancer" } ).pretty()
State:2—正在进行均衡; 11.WT内存
db.serverStatus():serverStatus 命令,或外壳程序中的 db.serverStatus() 返回数据库状态的总览,具体包括磁盘使用状况、
内存使用状况、 连接、 日志和可用的索引。此命令迅速返回,并不会影响 MongoDB 性能
db.Stats():Stats 命令,或外壳程序中的 db.stats() 返回一份针对存储使用情况和数据卷的文档。 dbStats 显示了存储的使用量、包含在数据库中的数据的总量以及对象、集合和索引计数器。
db.getLastError():getLastError 命令,查看最近的错误。 mongoDB内存使用情况 db.serverStatus().men
mongostat --port <xxx> -u<xxx> <password> 若操作不在内存中进行,fault不是0 12.mongodb日常操作
db.addUser('test','test',true) 添加用户,readonly--false/true
db.addUser('test','test222') 改密码
db.system.remove({user:"test"})或者db.removeUser("test") 删除用户 use admin 超级用户
db.auth('test','test') 用户授权 db.system.user.find() 查看用户列表 show users 查看所有用户
db.prntCollectionStats() 查看各集合状态 db.printReplicationInfo() 查看主从状态 show dbs db
查看当前database show collections 查看当前db下的collections 13.日常命令 table/collection
column/fields db.dropDatabase() 删除数据库 db.user.insert({user_id: "abc123", age:
55, status: "A"}) 隐士创建collection alter table users add join_date datetime;
db.users.update({ }, {$set: {join_date: new Date()}, {multi: true}}) alter
table users drop column join_date; db.user.update({ }, {$unset: {join_date:
""}}, {multi: true}) create index id_user_id_asc on users(user_id);
db.user.ensureIndex({user_id: 1}) create index id_user_id_asc_age_desc on
user(user_id,age DESC); db.user.ensureIndex({user_id: 1, age: -1}) drop table
users; db.users.drop() insert into users(user_id, age, status) values
("bcd001", 45,"A") db.user.insert({user_id: "bcd001", age: 45, status: "A"})
select * from users; db.user.find() select id, user_id, status from users;
db.users.find({ }, {user_id: 1, status: 1}) select user_id,status from users
db.user.find({ }, {user_id: 1, status: 1, _id: 0}) select * from users where
status = "A"; db.user.find({status: "A"}) select user_id,status from users
where status = "A"; db.users.find({status: "A"}, {user_id: 1,status: 1, _id:
0}) select * from users where status != "A"; db.users.find({status: {$ne:
"A"}}) select * from users where status = "A" and age = 50;
db.users.find({status: "A", age: 50}) select * from users where status = "A" or
age = 50; db.users.find({$or: [{status: "A"}, {age: 50}]}) select * from users
where age > 25; db.users.find({age: {$gt: 25}}) select * from users where age <
25; db.users.find({age: {$lt: 25}}) select * from users where age > 25 and age
<=50; db.users.find({age: {$gt: 25, $lte: 50}}) select * from users where
user_id like "%bc%"; db.users.find({user_id: /bc/}) select * from user where
user_id like "bc%"; db.users.find({user_id: /^bc/}) select * from users where
status = "A" order by user_id asc; db.users.find({status: "A"}).sort({user_id:
1}) select * from users where status="A" order by user_id desc;
db.users.find({status:"A"}).sort({user_id: -1}) select count(*) from users;
db.users.count() 或者db.users.find.count() select count(user_id) from users;
db.users.count({user_id: {$exist: true}})或者db.users.find({user_id: {$exists:
true}}).count() select count(*) from users where age > 30; db.users.count({age:
{$gt:30}})或者db.user.find({age: {$gt: 30}}).count() select distinct(status) from
users; db.users.distinct("status") select * from users limit 1;
db.users.findOne()或者 db.users.find().limit(1) select * from users limit 5 skip
10; db.users.find().limit(5).skip(10) explain select * from users where status
= "A"; db.users.find({status: "A"}).explain() update users set status = "C"
where age > 25; db.users.update({age: {$gt: 25}}, {$set: {status:"C"}}, {multi:
true}) update users set age = age + 3 where status = "A";
db.users.update({status: "A"}, {$inc: {age: 3}}, {multi:true}) delete from
users where status = "D"; db.users.remove({status: "D"}) delete from users;
db.users.remove() truncate table users; db.users.remove() 13.当前操作 db.
currentOp():查看当前数据库上的操作语句信息,包括insert/query/update/remove/getmore/command等多种操作。
重要参数说明: opid:操作进程号 op:操作类型(query,update...) ns:命名空间(namespace),即操作对象
query:显示操作的具体内容 lockType:锁类型,表明是写锁or读锁 db. killOp(opid):kill当前数据上的操作,以opid为标识
14.慢查询 db.getProfilingStatus():查看当前profiling status -----慢查询日志的常用属性说明
>db.system.profile.find() 重要参数说明:
op:操作类型,有insert、query、update、remove、getmore、command ns : 操作的集合 ts :命令在何时执行 info
:命令的详细信息 reslen: 返回结果集的大小 nscanned:本次查询扫描的记录数 nreturned: 本次查询实际返回的结果集
mills:该命令的执行耗时(单位:毫秒) query : 查询语句 ntoreturn : 返回的记录数 ntoskip :skip()方法指定的跳跃数
nscanned : 扫描数量 keyUpdates :
索引更新的数量,改变一个索引键带有一个小的性能开销,因为数据库必须删除旧的key,并插入一个新的key到B-树索引 lockStats
:锁信息,R:全局读锁;W:全局写锁;r:特定数据库的读锁;w:特定数据库的写锁 timeLockedMicros : 锁
timeAcquiringMicros :锁等待 responseLength: 结果字节长度 millis: 消耗的时间(毫秒) ts : 语句执行的时间
client :链接ip或则主机 allUsers ,user:用户
scanAndOrder:是一个布尔值,是True当一个查询不能使用的文件的顺序在索引中的排序返回结果:MongoDB中必须将其接收到的文件从一个游标后的文件进行排序。如果scanAndOrder是False,MongoDB的可使用这些文件的顺序索引返回排序的结果。
moved:更新操作在磁盘上移动一个或多个文件到新的位置。表明本次update是否移动了硬盘上的数据,如果新记录比原记录短,通常不会移动当前记录,如果新记录比原记录长,那么可能会移动记录到其它位置,这时候会导致相关索引的更新.磁盘操作更多,加上索引更新,会使得这样的操作比较慢.
nupdated:更新文档的数目 getmore:这是一个getmore
操作,getmore通常发生在结果集比较大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取的。
如果nscanned(扫描的记录数)远大于nreturned(返回结果的记录数)的话,要考虑通过加索引来优化记录定位了。 responseLength
如果过大,说明返回的结果集太大了,这时要看是否只需要必要的字段。 ----常用查询 ---返回最近的10条记录
db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()
---返回所有的操作,除command类型 db.system.profile.find( { op: { $ne : 'command' } }
).pretty() --返回特定集合 db.system.profile.find( { ns : 'mydb.test' } ).pretty()
---返回大于500毫秒的慢操作 db.system.profile.find( { millis : { $gt : 500 } } ).pretty()
---返回特定的时间范围内的慢查询信息 db.system.profile.find( { ts : { $gt : new
ISODate("2015-06-09T03:00:00Z") , $lt : new ISODate("2015-06-09T03:40:00Z") } }
).pretty() --返回特定时间,特定用户,按照消耗时间排序 db.system.profile.find( { ts : { $gt : new
ISODate("2015-06-09T03:00:00Z") , $lt : new ISODate("2015-06-09T03:40:00Z") }
}, { user : “ucms@ucms” } ).sort( { millis : -1 } )
 

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信