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

  1. 直接导出某个DB
    mongodump –db <数据库名称> –out <输出目录>
    mongodump –db mydatabase –out ./data
    导入命令
    mongorestore –host <目标主机> –port <目标端口> <输入目录>
    mongorestore –db mynewdatabase –host localhost –port 27017 ./data/mydatabase

  2. 导出占用较大的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


mongo数据迁移
https://johnson7788.github.io/2023/04/06/mongo%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB/
作者
Johnson
发布于
2023年4月6日
许可协议