定义
setFeatureCompatibilityVersion启用或禁用将与早期版本 MongoDB 不兼容的数据持久化的功能。您只能对
admin数据库发出setFeatureCompatibilityVersion。
警告
启用向后不兼容的功能可能会使降级过程变得复杂,因为在降级之前,您必须删除任何持续存在的向后不兼容的功能。
升级后,建议让部署在不启用向后不兼容功能的情况下稳定运行一段时间,以确保降级回老版本的可能性极小。当确信降级的可能性非常小时,请启用这些功能。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
在版本8.3中进行了更改。
该命令具有以下语法:
db.adminCommand( { setFeatureCompatibilityVersion: <version>, confirm: true, writeConcern: { wtimeout: <timeout> }, dryRun: <boolean> } )
命令字段
setFeatureCompatibilityVersion 命令接受以下字段:
setFeatureCompatibilityVersion
必需
version 的可能值是:
版本 | 说明 |
|---|---|
| 可用于 MongoDB 8.3 部署 |
| 可用于MongoDB 8.2 和MongoDB 8.3部署 从MongoDB8.3 开始,您可以将 FCV从 |
| 可用于 MongoDB 8.0 部署 |
| 在 MongoDB 7.0 部署中可用 |
确认
必需
7.0 版本中的新增功能。
设置为 true 以确认功能兼容性更改并允许操作继续。
如果省略 confirm 参数或将 confirm设立为 true 以外的值,则该命令将失败并返回有关修改特征兼容性版本的警告。
writeConcern
Optional
writeConcern 以毫秒为单位指定写关注 wtimeout 值:
干运行
Optional
如果设立为 true, MongoDB会模拟特征兼容性版本的升级或降级。如果集群包含不兼容的数据,则操作将失败并显示错误。
8.3版本新增。
行为
如果必须将功能兼容性版本降级到 8.0 以下,则必须先运行 transitionToDedicatedConfigServer 命令。有关降级的详细信息,请参阅功能兼容性版本。
使用前向不兼容数据进行升级
如果您尝试升级集群的FCV,而该集群的 FCV 在升级版本中包含向前不兼容的数据,则会收到CannotUpgrade 错误。前向不兼容数据可以指集群中依赖于目标版本中已删除功能的任何数据。
出现此错误时,请执行以下任一操作:
修改集群数据以删除向前不兼容的功能,然后使用升级版本重新运行
setFeatureCompatibilityVersion命令,将FCV设立为升级版本。setFeatureCompatibilityVersion使用原始降级版本运行 命令,将FCV设立回原始版本。重要
将FCV设置为原始版本会停止升级过程,并将FCV更改回降级版本。此过程不会将集群重置回FCV升级开始之前的状态。
如果FCV升级确认不存在前向不兼容的数据,但因其他原因而停止或失败,则任何后续的FCV降级尝试也将失败,并显示错误消息。您必须先完成FCV升级,然后再尝试降级FCV。
使用向后不兼容的数据进行降级
如果您尝试降级降级版本中包含向后不兼容数据的集群的FCV ,则会收到CannotDowngrade 错误。向后不兼容的数据可以指集群中依赖于目标版本中未提供的功能的任何数据。
出现此错误时,请执行以下任一操作:
修改集群数据以删除向后兼容的功能,然后使用降级版本重新运行
setFeatureCompatibilityVersion命令,将 fCV 设置为降级版本。使用原始升级版本运行
setFeatureCompatibilityVersion命令,以便将 fCV 重新设置为原始版本。重要
将 FcV 设置为原始版本会停止降级过程,并将 FcV 更改回升级版本。此过程不会将集群重置回到 FcV 降级开始之前的状态。
如果FCV降级确认不存在向后不兼容的数据,但由于其他原因而停止或失败,则任何后续的FCV升级尝试也将失败,并显示错误消息。您必须先完成FCV降级,然后再尝试升级FCV。
MongoDB 8.3 中的降级策略
从8.3 开始,您可以将部署的FCV降级到上一个次要版本。
要学习;了解更多信息,请参阅将8.3降级至8.2 。
与后台操作冲突
某些后台操作可能会阻止 setFeatureCompatibilityVersion 的执行。使用 currentOp 确定任何正在进行的操作。
同步失败
如果在初始同步过程中触发 setFeatureCompatibilityVersion 更改,在 oplog 应用阶段重放条目时,同步可能会失败,并显示 OplogOperationUnsupported 错误信息。此尝试之后的同步会成功,因为操作阶段不再重放该操作。
Default Values
部署 | featureCompatibilityVersion |
|---|---|
对于新的8.3 部署 |
|
对于从8.3 升级的 部署8.2 |
|
对于新的8.0 部署 |
|
对于从8.0 升级的 部署7.0 |
|
对于新的 7.0 部署 |
|
从 6.0 升级的 7.0 部署 |
|
幂等
此命令执行的必须是对内部系统集合的写入。如果由于任何原因该命令未能成功完成,您都可以安全地重试该命令,因为该操作是幂等的。
Cluster-to-Cluster Sync 和用户写入阻塞
从 MongoDB 6.0 开始,如果需要降级特征兼容性版本,请确保禁用集群到集群复制和用户写入阻止。
如果您启用了集群到集群复制,请将其禁用。
如果启用了用户写入阻止,请将其禁用:
db.runCommand( { setUserWriteBlockMode: 1, global: false } ) 等待上一条命令完成。
使用
setFeatureCompatibilityVersion降级特征兼容性版本。
有关 MongoDB Cluster-to-Cluster Sync 的更多信息,请参阅文档。
仲裁节点中的功能兼容性
仲裁节点不会复制 admin.system.version 集合。因此,无论副本集的 fCV 值如何,仲裁节点始终具有等于二进制文件的降级版本的特征兼容性版本。
示例, MongoDB 5.0集群中的仲裁节点的FCV值为 4.4。
示例
获取 FeatureCompatibilityVersion
要查看 mongod 实例的 featureCompatibilityVersion,请在 mongod 实例上运行 getParameter 命令:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
输出类似如下所示:
{ featureCompatibilityVersion: { version: '5.0' }, ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1660318752, i: 5 }), signature: { hash: Binary(Buffer.from("ce0cff3621e9b089fa6d8e9a1e1efc1a1ff15dab", "hex"), 0), keyId: Long("7129893797260951557") } }, operationTime: Timestamp({ t: 1660318752, i: 5 }) }
在MongoDB 8.0 部署上设置功能兼容性版本
启用 8.0 向后不兼容的功能
8.0要启用保留与MongoDB7.0 不兼容的数据的"8.0" 功能,请在MongoDB8.0 部署上将功能兼容性设立为 :
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
db.adminCommand( { setFeatureCompatibilityVersion: "8.0", confirm: true } )
禁用 8.0 向后不兼容的功能
8.0要禁用保留与MongoDB7.0 不兼容的数据的"7.0" 功能,请在MongoDB8.0 部署上将功能兼容性设立为 :
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
"7.0"MongoDB 7.0 和MongoDB 8.0 部署支持 featureCompatibilityVersion。
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
如果您在从MongoDB8.0 降级到MongoDB 的进程中运行此命令,则还必须删除所有与7.0 7.0不兼容的保留功能。请参阅相应的降级程序。
在 MongoDB 7.0 部署上设置功能兼容性版本
启用 7.0 向后不兼容的功能
要启用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"7.0":
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
禁用 7.0 向后不兼容的功能
要禁用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"6.0":
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
"6.0"仅 MongoDB 6.0 和 MongoDB 7.0 部署支持 featureCompatibilityVersion。
db.adminCommand( { setFeatureCompatibilityVersion: "6.0", confirm: true } )
如果作为从 MongoDB 7.0 降级到 MongoDB 6.0 的过程的一部分运行,则还必须删除所有与 6.0 不兼容的保留功能。请参阅相应的降级程序。
设置写关注超时
以下示例将可选写关注 wtimeout 字段设置为 5000(5 秒)。
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
db.adminCommand( { setFeatureCompatibilityVersion: "5.0", writeConcern: { wtimeout: 5000 } } )