千家信息网

mongodb迁移分片,关闭或者移除表的sharding ,

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。但是缩减集群(删除分片)这种一般很少用到,但是有些场景,必须把它上面的数据自动迁移到其他Shard上。mongodb迁
千家信息网最后更新 2026年11月01日mongodb迁移分片,关闭或者移除表的sharding ,

MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。

但是缩减集群(删除分片)这种一般很少用到,但是有些场景,必须把它上面的数据自动迁移到其他Shard上。


mongodb迁移分片

1、执行RemoveShard命令 --只是迁移sharding表

1 db.runCommand( { removeshard:"your_shard_name" } )

3 { msg : "draining startedsuccessfully" , state: "started" , shard :"mongodb0",ok : 1 }

上面这句会立即返回,实际在后台执行。

2、查看迁移状态

我们可以反复执行上面语句,查看执行结果。

1 db.runCommand( { removeshard:"your_shard_name" } )

3 { msg: "draining ongoing" ,state: "ongoing", remaining: { chunks: 42, dbs : 1 }, ok: 1 }

从上面可以看到,正在迁移,还剩下42块没迁移完。

当remain为0之后,这一步就结束了。

3、迁移非Shard数据或者非Shard库

1 db.runCommand( { movePrimary:"testdb", to: "shard2" })

这次就不是立即返回了,需要很久,然后会返回如下:

1 { "primary" :"mongodb1", "ok" : 1 }

4、最后的清理

上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。

1 db.runCommand( { removeshard: "shard1"} )

执行成功后,会如下结果:

1 { msg: "remove shard completedsuccesfully", stage: "completed", host: " shard1", ok: 1 }

显示completed后,就可以安心的关闭mongod的进程了。

注意官方关于是否需要运行movePrimary的说明:

也就是说,如果在这个片上有非分片的collection,这样的话,分片的数据合到其他片上了,那么剩下的非分片数据,没法通过合并分片的方式合到其他服务器上,所以这时要运行一个movePrimary命令将这些非分片的数据移到另一个服务器上。db.runCommand( { movePrimary: "testdb", to: "shard1"})

还有一个官方说明需要注意的是:

Warning

Do not run themovePrimary until you have finished draining the shard

也就是说,一定要等到分片数据迁移完了,再运行movePrimary命令!!!

而且这句命令不像removeshard是异步的,这个movePrimary命令会等到将所有非分片数据都移到其他服务器后,才响应,所以时间有可能会比较长,主要还是看这个服务器上,非分片数据有多少。

另外,movePrimary执行完后,还记得将db.runCommand({removeshard:"shardx"})再运行一遍,直到看到如下结果{ msg: "remove shard completed successfully" , stage:"completed", host: "mongodb0", ok : 1 }

到此为止,迁移才真正完成,可以放心地关闭mongod。




mongodb关闭表的分片 (移除分片)

过程: 导出带有sharding 的集合, 删除集合 ,导入集合


1.导出集合

/usr/local/mongodb/bin/mongodump--host 127.0.0.1:30000 -d testdb -c table1 -o testdb/

2.禁用分片的自动平衡

> use config

>db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

> db.printShardingStatus()

3.删除集合

db.table1.drop();

4.导入集合

/usr/local/mongodb/bin/mongorestore --host 127.0.0.1:30000 -d testdb testdb/


执行 db.printShardingStatus() ,查看分片概要

发现集合table1 的 sharding 功能已经被关闭!




平衡的关闭和开启

mongodb在做自动分片平衡的时候,或引起数据库响应的缓慢,可以通过禁用自动平衡以及设置自动平衡进行的时间来解决这一问题。

(1)禁用分片的自动平衡

> use config

>db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );


恢复动态平台:

use config

db.settings.remove({"_id":"balancer"});

(2)自定义自动平衡进行的时间段

> use config

>db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "21:00", stop : "9:00" } } }, true )


数据 命令 服务器 服务 运行 时间 结果 也就是 也就是说 官方 集群 缓慢 成功 到此为止 这样的话 功能 动态 只是 可以通过 后台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 亿人帮互联网科技有限公司 互联网属科技 高科技与互联网 青岛互联网科技公司 互联网科技ppt模板 互联网科技小额贷款 顺玮阁互联网科技 上海卓越科技 互联网 金融科技和互联网金融 中国互联网有什么科技含量 南山科技园互联网公司有哪些 互联网和黑科技的看法 链环科技传统企业怎么转型互联网 互联网金融科技公司的优势 中国互联网有什么科技 中天科技中国工业互联网 西安有哪些互联网高科技企业 福建互联网展示科技馆设计 唐山双旺合互联网科技产业园 互联网是不是新科技 万易互联网科技 迪茉互联网科技 互联网为啥属于高科技 长沙互联网科技 唐山双旺合互联网科技产业园 杭州融税互联网科技有限公司 优雇互联网科技有限公司 利用互联网等科技手段 山东亿川互联网科技有限责任公司
0