setFeatureCompatibilityVersion
本页内容
定义
setFeatureCompatibilityVersion
启用或禁用与MongoDB早期版本不兼容的数据持久化功能。您只能针对
admin
数据库发出setFeatureCompatibilityVersion
。
警告
启用向后不兼容的功能可能会使降级过程复杂化,因为您必须在降级之前删除任何已持久化的向后不兼容功能。
建议在升级后,允许您的部署在不启用向后不兼容功能的情况下运行一段时间,以进行烧入,以确保降级的可能性最小。当您确信降级的可能性最小后,再启用这些功能。
兼容性
此命令可在以下环境中的部署中使用
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB Community:开源、免费使用、自托管的MongoDB版本
语法
变更版本7.0.
该命令具有以下语法
db.adminCommand( { setFeatureCompatibilityVersion: <version>, confirm: true, writeConcern: { wtimeout: <timeout> } } )
命令字段
setFeatureCompatibilityVersion
命令接受以下字段
设置功能兼容性版本
必需
version
的可能值如下
版本 | 描述 |
---|---|
"7.0" | 在 MongoDB 7.0 部署上可用 |
"6.0" | 在 MongoDB 6.0 和 7.0 部署上可用 |
"5.0" | 在 MongoDB 5.0 和 6.0 部署上可用 |
确认
必需
新版本7.0.
将 true
设置为确认功能兼容性更改,并允许操作继续。
如果您省略了 confirm
参数或将 confirm
设置为除 true
以外的任何值,则命令失败并返回有关修改功能兼容性版本的警告。警告指出,在您升级或降级集群的fCV 之后,您无法在没有支持协助的情况下降级二进制版本。
writeConcern
可选
《writeConcern》(写关注)指定了以毫秒为单位的写关注wtimeout
值
行为
如果您必须将功能兼容版本降级到8.0以下,您必须首先运行transitionToDedicatedConfigServer
命令。有关降级详情,请参阅降级功能兼容版本。
向后不兼容数据降级
如果尝试将包含下载版本中不兼容数据的集群的fCV降级,则会收到CannotDowngrade
错误。当出现此错误时,集群将保持在过渡状态的downgrading
。
要使集群脱离downgrading
状态,请执行以下操作之一:
修改集群数据以移除向后不兼容的功能,然后重新运行降级版本的
setFeatureCompatibilityVersion
命令以设置fCV为降级版本。使用原始升级版本的
setFeatureCompatibilityVersion
命令来设置fCV回原始版本。重要
将fCV设置为原始版本将停止降级程序,并将fCV恢复到升级版本。此过程不会将集群恢复到fCV降级开始之前的状态。
如果失败的fCV降级的内部元数据没有被清理,任何随后的fCV升级尝试都会因错误信息而失败。您必须在尝试升级fCV之前完成fCV的降级。
mongodb 7.0中降级策略的变化
从mongodb 7.0开始,您不能将部署的fCV降级到或从mongodb的快速发布版本。
如果您升级或降级部署的fCV,则无法在不从支持人员获得帮助的情况下降级部署的二进制版本。
有关更多信息,请参阅降级7.0到6.0。
与后台操作冲突
某些后台操作可能会阻止执行setFeatureCompatibilityVersion
。使用currentOp
来识别任何正在进行的操作。
同步失败
如果您在初始同步过程中触发了一个 setFeatureCompatibilityVersion
变更,同步可能会在 oplog
应用阶段重新播放条目时失败,并显示一个 OplogOperationUnsupported
错误消息。由于操作阶段不再重新播放操作,因此尝试后的同步将成功。
默认值
部署 | featureCompatibilityVersion |
---|---|
对于新7.0部署 | "7.0" |
对于从6.0升级而来的7.0部署 | |
对于新6.0部署 | "6.0" |
对于从5.0升级而来的6.0部署 | |
对于新5.0部署 | "5.0" |
对于从4.4升级而来的5.0部署 |
幂等性
此命令必须对内部系统集合执行写入操作。如果由于任何原因命令未成功完成,您可以安全地重试该命令,因为该操作是幂等的。
集群间同步和用户写入阻塞
从 MongoDB 6.0 开始,如果您需要降级功能兼容性版本,请确保您已禁用集群间复制和用户写入阻塞。
如果您启用了集群间复制,请禁用它。
如果您启用了用户写入阻塞,请禁用它
db.runCommand( { setUserWriteBlockMode: 1, global: false } ) 等待之前的命令完成。
使用
setFeatureCompatibilityVersion
. 降级功能兼容性版本。
有关 MongoDB 集群间同步的更多信息,请参阅文档。
仲裁者中的功能兼容性
仲裁者不复制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 7.0部署中设置功能兼容性版本
启用7.0向后不兼容功能
为了启用与MongoDB 6.0不兼容的数据持久化7.0功能,请将MongoDB 7.0部署中的功能兼容性设置为"7.0"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
禁用7.0向后不兼容功能
为了禁用与MongoDB 6.0不兼容的数据持久化7.0功能,请将MongoDB 7.0部署中的功能兼容性设置为"6.0"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "6.0", confirm: true } )
如果在从MongoDB 7.0降级到MongoDB 6.0的过程中运行,您还必须删除所有与6.0不兼容的已持久化功能。请参阅相应的降级流程。
在MongoDB 6.0部署中设置功能兼容性版本
启用6.0向后不兼容的功能
要启用与MongoDB 5.0不兼容的数据的6.0功能,请在MongoDB 6.0部署中将功能兼容性设置为"6.0"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
禁用6.0向后不兼容的功能
要禁用与MongoDB 5.0不兼容的6.0功能,请在MongoDB 6.0部署中将功能兼容性设置为"5.0"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
如果在将MongoDB 6.0降级到MongoDB 5.0的过程中运行,您还必须删除所有与5.0不兼容的已持久化功能。请参阅相应的降级程序。
在MongoDB 5.0部署上设置功能兼容性版本
启用5.0向后不兼容功能
要启用与MongoDB 4.4不兼容的数据的5.0功能,请在MongoDB 5.0部署中将功能兼容性设置为"5.0"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
禁用5.0向后不兼容功能
要禁用与MongoDB 4.4不兼容的数据的5.0功能,请在MongoDB 5.0部署中将功能兼容性设置为"4.4"
注意
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
如果在从MongoDB 5.0到MongoDB 4.4的降级过程中运行,还必须删除所有与4.4不兼容的已持久化功能。请参阅相应的降级程序。
设置写入关注超时
以下示例将可选的写入关注字段 wtimeout
设置为 5000(5 秒)。
注意
db.adminCommand( { setFeatureCompatibilityVersion: "5.0", writeConcern: { wtimeout: 5000 } } )