Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

movePrimary

在此页面上

  • 兼容性
  • Considerations
  • 更多信息
movePrimary

分片集群中, movePrimary重新分配用于保存数据库中所有未分片集合的主分片分片。 movePrimary首先更改集群元数据中的主分片分片,然后将所有未分片集合迁移到指定分分片。 使用以下形式的命令:

db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } )

例如,以下命令将主分片从test移动到shard0001

db.adminCommand( { movePrimary : "test", to : "shard0001" } )

当命令返回时,数据库的主分片位置已切换到指定的分片。 要完全停用分片,请使用removeShard命令。

movePrimary是管理命令,仅适用于mongos实例。

警告

启动movePrimary后,在该命令完成之前,请勿对该数据库中的任何分片集合执行任何读取或写入操作。 迁移期间对这些集合发出的读取或写入操作可能会导致意外行为,包括迁移操作可能失败或数据丢失。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。

mongos对 使用"majority" movePrimary写关注。

movePrimary 可能需要很长时间才能完成,具体取决于数据库的大小以及网络运行状况或计算机资源等因素。 迁移期间对数据库发出的读取或写入操作可能会导致意外行为,包括迁移操作可能失败或数据丢失。

请考虑安排一个维护窗口,在此期间应用程序会停止对集群的所有读取和写入。 在计划内停机期间发出movePrimary可以降低由于交叉读取或写入数据库中的未分片集合而导致出现未定义行为的风险。

movePrimary 如果目标分片包含有冲突的collection命名空间,则会失败。例如:

  1. 管理员发出movePrimary来更改hr数据库的主分片。

  2. movePrimary移动hr中的未分片集合时,用户或应用程序对该集合发出写操作。 写入操作会在原始主分片中创建collection。

  3. 管理员稍后发出movePrimary来恢复hr数据库的原始主分片。

  4. movePrimary 由于交错写入操作留下的命名空间冲突而失败。

作为movePrimary操作的一部分,目标分片必须在成为主分片后对迁移的collection重建索引。这可能需要大量时间,具体取决于每个collection的索引数量和要索引的数据量。

有关索引构建过程的更多信息,请参阅在已填充collection上构建索引。

从 MongoDB 8.0 开始,movePrimary 不会将具有变更流的集合作废。将集合移到新的分片之后,变更流可以继续从集合中读取事件。

在早期MongoDB版本中, movePrimary会使集合变更流无效,并且变更流无法从集合中读取事件。

在所有MongoDB版本中, movePrimary会更新移动的未分片集合的 UUID

有关完整过程,请参阅从分片集群中删除分片

后退

moveCollection