Docs 主页 → 开发应用程序 → MongoDB Manual
将 4.4 独立运行版降级至 4.2
在尝试任何降级之前,请先熟悉本文档的内容。
降级路径
如果需要从 4.4 降级,请降级到最新的 4.2 补丁版本。
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 4.4 系列部署降级为 4.2 系列部署。但是,不支持将 4.2 系列部署进一步降级为 4.0 系列部署。
警告
降级下限
如果需要从版本 4.4 降级,请降级到 4.2.6 或更高版本。 您无法降级到 4.2.5 或更早的版本。
创建备份
可选但建议使用。创建数据库备份。
访问控制
如果部署已启用访问控制,则降级用户权限必须包括跨数据库列出和管理索引的权限。具有 root
角色的用户拥有所需的权限。
先决条件
要从 4.4 降级到 4.2,您必须删除保留的不兼容功能和/或更新不兼容的配置设置。 其中包括:
1. 命名空间长度
从 MongoDB 4.4 开始:
未分片collection和视图的命名空间长度限制为 255 字节,分片collection的命名空间长度限制为 235 字节。对于collection或视图,命名空间包括数据库名称、点 ( .
) 分隔符和collection/视图名称(例如<database>.<collection>
)。
在降级之前,请解析命名空间超过特征兼容性版本 (FCV) 4.2 的 120 字节命名空间长度限制的任何collection或视图。
要确定collection或命名空间是否超过 120 字节限制,请将mongo
shell 连接到mongod
实例并运行:
db.adminCommand("listDatabases").databases.forEach(function(d){ let mdb = db.getSiblingDB(d.name); mdb.getCollectionInfos( ).forEach(function(c){ namespace = d.name + "." + c.name namespacelenBytes = encodeURIComponent(namespace).length if (namespacelenBytes > 120) { print (c.type.toUpperCase() + " namespace exceeds 120 bytes:: " + namespace ) } } ) })
如果任何collection或视图命名空间超过 120 字节,则在降级 FCV之前执行 :
使用
renameCollection
命令重命名collection。对于视图,使用
db.createView()
以更短的名称重新创建视图,然后删除原始视图。
2. 降级特征兼容性版本 (fCV)
要降级独立运行的 featureCompatibilityVersion
,请执行以下操作:
将
mongo
Shell 连接到mongod
实例。将
featureCompatibilityVersion
降级为"4.2"
。db.adminCommand({setFeatureCompatibilityVersion: "4.2"}) setFeatureCompatibilityVersion
命令对内部系统集合执行写入操作,并且是幂等的。如果由于任何原因未成功完成该命令,请在mongod
实例上重试该命令。
3. 删除 fCV 4.4 保留功能
仅当 fCV 设置为 "4.4"
时,才需要执行以下步骤。
删除所有与 4.2 不兼容的保留 4.4功能。 其中包括:
- 复合哈希索引
删除所有复合哈希索引。
使用
db.collection.getIndexes()
识别集合中的任何复合哈希索引,并使用db.collection.dropIndex()
删除这些索引。
4. 删除 4.4 功能
删除所有使用 4.4 功能的保留功能。 这些包括但不限于:
如果有任何视图定义包含 4.4 操作符,例如
$unionWith
或$function
。 另请参阅新聚合操作符。
步骤
警告
在继续执行降级过程之前,请确保已满足先决条件。