四时宝库

程序员的知识宝库

MongoDB 使用技巧记录(十二)(mongodb基本操作)

MongoDB 使用技巧记录(十二)

一:sort()方法的size限制

当我对一个没有建索引的字段做find,然后做sort的时候,可能触发sort的size的32MB限制,例如:

cswuyg> db.stotal.find({}).sort({'type':-1})

Error: error: {

"$err" : "Executor error: Overflow sort stage buffered data usage of 33554493 bytes exceeds internal limit of 33554432 bytes",

"code" : 17144

}

有两种解决方法:

解决方法一:对需要排序的字段建索引 db.stotal.ensureIndex({'type': -1})

解决方法二:修改默认配置,把sort时可以用的内存设置大点:cswuyg> db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:335544320})

这两种解决方法各有利弊:(1)增加了索引会导致数据写入变慢,存储占用变多;(2)不建索引修改默认配置,会导致sort的时候占用更多的内存。

> db.InfoLog.remove({CreateDateTime:{$lt:"2016-08-24 00:00:00"}});

WriteResult({ "nRemoved" : 2814859 })

> db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:655544320})

{ "was" : 33554432, "ok" : 1 }

> db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:655544320})

{ "was" : 655544320, "ok" : 1 }

> db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:655544320})


二:索引

查索引

db.InfoLog.getIndexes()

建立索引

db.InfoLog.ensureIndex({"CreateDateTime":1})

删除索引

db.InfoLog.dropIndex({"CreateDateTime":1})

> use HospitalServiceLogging

switched to db HospitalServiceLogging

> show collections;

ErrorLog

InfoLog

WarningLog

system.indexes

> db.InfoLog.getIndexes()

[

{

"v" : 1,

"key" : {

"_id" : 1

},

"name" : "_id_",

"ns" : "HospitalServiceLogging.InfoLog"

}

]

> db.InfoLog.ensureIndex({"CreateDateTime":1})

{

"createdCollectionAutomatically" : false,

"numIndexesBefore" : 1,

"numIndexesAfter" : 2,

"ok" : 1

}

>

> db.InfoLog.getIndexes()

[

{

"v" : 1,"key" : {

"_id" : 1

},

"name" : "_id_",

"ns" : "HospitalServiceLogging.InfoLog"

},

{

"v" : 1,

"key" : {

"CreateDateTime" : 1

},"name" : "CreateDateTime_1",

"ns" : "HospitalServiceLogging.InfoLog"

}

]

三:mongodb-副本集-增量备份及恢复

MongoDB数据备份的增量备份和增强备份的增量恢复可以通过使用mongodump和mongorestore命令进行实现

如果是副本集:

--host replicaSetName/hostname:port

增量备份

mkdir -p /data/mongo/backup/`date +%Y-%m-%d`
docker exec -it  8fe8e2660999 mongodump -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 -o /data/backup/`date +%Y-%m-%d` --oplog -u=root -p=Aa123456 --authenticationDatabase=admin

增量恢复

docker exec -it mongodb02 mongorestore -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 --dir /data/backup/`date +%Y-%m-%d` --oplogReplay -u=root -p=Aa123456 --authenticationDatabase=admin


增量恢复前记录

模拟误操作删除一条记录

sh mongo_increment_restore.sh

增量恢复后记录(原有记录会提示ID重复)

#恢复单个集合

your_database_name 是要恢复的目标数据库的名称,your_collection_name 是要恢复的集合的名称,/path/to/backup/folder/your_collection.bson 是指定的备份文件路径和文件名

mongorestore --db your_database_name --collection your_collection_name /path/to/backup/folder/your_collection.bson

#备份指定集合下的单条记录

#单条记录
docker exec -it  mongodb02  mongodump -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 -d meng -c meng -q '{"_id":"64dae6fe6ce76861bbec69e4"}' -o /data/backup/`date +%Y-%m-%d` -u=root -p=Aa123456 --authenticationDatabase=admin

docker exec -it  mongodb02  mongoexport -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 -d meng -c meng -q '{"_id":{"$oid":"64dad5ea6ce76861bbec69bc"}}' -o /data/backup/`date +%Y-%m-%d`/meng.json -u=root -p=Aa123456 --authenticationDatabase=admin



删除后,尝试恢复

docker exec -it mongodb02 mongoimport -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 -d meng -c meng --type json --file /data/backup/date +%Y-%m-%d/meng.json -u=root -p=Aa123456 --authenticationDatabase=admin

查看已经恢复

#增量

docker exec -it mongodb02 mongodump -h mongo-rs/192.168.10.14:27018,192.168.10.14:27019,192.168.10.14:27020 -d local -c oplog.rs -q '{"ts":{"$gt": {"$timestamp":{"t":1692175198, "i":1}}}}' -o /data/backup/date +%Y-%m-%d/oplog1.json -u=root -p=Aa123456 --authenticationDatabase=admin

#使用jq获取某个json下的多层级值

docker exec -it 53befdae9851 bsondump /data/backup/2023-12-07/oplog.bson |jq '.ts."$timestamp".t'|head -1


#取最大值

TimeValue=docker exec -it 53befdae9851 bsondump /data/backup/${Curdate}/oplog.bson |jq '.ts."$timestamp".t'|sort -r|head -1

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接