mongo数据迁移
Mongo占用内存过大,迁移部分collection到其它机器
背景
mongo和大数据共用一个机器,当mongo中数据较多时,占用内存加到,影响到了大数据机器的稳定性,需要迁移到其它机器
Mongo和内存之间的关系
MongoDB数据库占用内存的大小主要依赖于以下几个因素:
数据量:显然,存储的文档数量越多,占用内存就越大。每个 MongoDB 文档通常占用约为 JSON 对象大小,这通常在 1KB 至 5KB 之间。
索引: MongoDB 可以在任何字段上创建索引。每个索引本身也会占用一定量的内存。所以,创建过多的索引会增加内存占用。
文档的平均大小:如果您存储的文档非常大(例如,每个文档包含大量媒体数据),那么整体内存占用将更大。
是否启用了内存索引:如果启用了内存索引,则 MongoDB 会在内存中缓存一部分的磁盘上索引,以改进查询性能。这会增加内存占用。
是否启用了内存 mapped view:与内存索引类似,如果启用了内存映射视图,则 MongoDB 也会在内存中缓存一部分数据,以提高视图的性能。这也会增加内存占用。
分片(如果适用):如果启用了 sharded 集群,每个片段又会有自己的内存占用。所以总体占用会大幅增加。
集群数(如果适用):如果您有多个互相独立的 MongoDB 集群,那么总的内存占用量将等于每个集群内存占用的总和。
查看已占用内存
经过top名称,按内存占用大小查看,mongo占用内存大小约28.2%
进入mongo查看某个db占用内存, 单位是B,除以1024/1024到MB
db.stats().storageSize
——>
21534863360
直接导出某个DB或导出某个collection
直接导出某个DB
mongodump –db <数据库名称> –out <输出目录>
mongodump –db mydatabase –out ./data
导入命令
mongorestore –host <目标主机> –port <目标端口> <输入目录>
mongorestore –db mynewdatabase –host localhost –port 27017 ./data/mydatabase导出占用较大的collection
导出db是label,collection是brand的数据
mongodump –host localhost –port 27017 –db label –collection brand > brand.bson
恢复数据一个collection数据
mongorestore –host otherhost –port 27017 –db label roles.bson
启动一个docker的mongo
sudo docker run -d –name mongodb -v /media/backup/mongo:/data/db -p 27017:27017 mongo:4.4.17
恢复mongo数据
mongorestore –db label –host newnew –port 27017 ./label