定义
setFeatureCompatibilityVersionEnables or disables the features that persist data incompatible with earlier versions of MongoDB. You can only issue the
setFeatureCompatibilityVersionagainst theadmindatabase.
To learn what the feature compatibility version is and how it supports downgrades, see MongoDB Versions and Upgrade Paths.
警告
启用向后不兼容的功能可能会使降级过程变得复杂,因为在降级之前,您必须删除任何持续存在的向后不兼容的功能。
升级后,允许部署在不启用向后不兼容功能的情况下运行一段稳定期。仅在确保不太可能降级后才启用这些功能。
兼容性
此命令可用于以下环境中托管的部署:
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部署 从 MongoDB 8.3 开始,您可以将 特征兼容性版本 从 |
| 可用于 MongoDB 8.0 部署 |
| 在 MongoDB 7.0 部署中可用 |
确认
必需
7.0版本新增。
设置为 true 以确认功能兼容性更改并允许操作继续。
如果省略 confirm 参数或将 confirm 设置为 true 以外的值,则该命令将失败并返回有关修改特征兼容性版本的警告。
writeConcern
Optional
writeConcern 以毫秒为单位指定写关注 wtimeout 值:
主节点等待大多数副本集成员确认的时间段。如果在该时间段内未收到确认,则操作失败。
干运行
Optional
如果设立为 true, MongoDB会模拟特征兼容性版本的升级或降级。如果集群包含不兼容的数据,则操作将失败并显示错误。
8.3版本新增。
行为
If you must downgrade the feature compatibility version below 8.0, you must first run the transitionToDedicatedConfigServer command. For downgrade details, see Downgrade Feature Compatibility Version.
使用前向不兼容数据进行升级
如果尝试升级升级版本中包含向前不兼容数据的集群的 特征兼容性版本 ,则会收到 CannotUpgrade 错误。向前不兼容数据可指集群中依赖于某个功能的任何数据,而该功能在目标版本中已被移除。
出现此错误时,请执行以下任一操作:
修改集群数据以删除向前不兼容的功能,然后使用升级版本重新运行
setFeatureCompatibilityVersion命令,将 特征兼容性版本 设置为升级版本。使用原始降级版本运行
setFeatureCompatibilityVersion命令,以便将 特征兼容性版本 重新设置为原始版本。重要
将 特征兼容性版本 设置为原始版本会停止升级过程,并将 特征兼容性版本 还原为降级版本。集群不会返回到在 特征兼容性版本 升级开始之前的状态。
如果 特征兼容性版本 升级确认没有向前不兼容的数据,但却停止或失败,任何后续的 特征兼容性版本 降级尝试也会失败并显示错误消息。必须先完成特征兼容性版本升级,然后才能降级特征兼容性版本。
使用向后不兼容的数据进行降级
如果您尝试降级在降级版本中包含向后不兼容数据的集群的 特征兼容性版本,则会收到 CannotDowngrade 错误。向后不兼容数据可以是集群中依赖于某个功能的任何数据,而该功能在目标版本中不可用。
出现此错误时,请执行以下任一操作:
修改集群数据以删除向后兼容的功能,然后使用降级版本重新运行
setFeatureCompatibilityVersion命令,将 fCV 设置为降级版本。使用原始升级版本运行
setFeatureCompatibilityVersion命令,以便将 fCV 重新设置为原始版本。重要
将 特征兼容性版本 设置为原始版本会停止降级过程,并将 特征兼容性版本 恢复为升级版本。集群不会返回到在 特征兼容性版本 降级开始之前的状态。
如果 特征兼容性版本 降级确认没有向后不兼容的数据,但在其他情况下停止或失败,则任何后续的 特征兼容性版本 升级尝试也会失败并显示错误消息。必须先完成特征兼容性版本降级,再升级特征兼容性版本。
MongoDB 8.3 中的降级策略
从 8.3 开始,您可以将部署的 特征兼容性版本 降级到上一个小版本。
要学习;了解更多信息,请参阅将8.3降级至8.2 。
与后台操作冲突
Certain background operations may prevent execution of setFeatureCompatibilityVersion. Use currentOp to identify any ongoing operations.
重要
从 MongoDB 9.0 开始,如果集群中任何集合上正在进行索引构建,setFeatureCompatibilityVersion 将提前失败并显示 BackgroundOperationInProgressForNamespace 错误,并且不会进行任何目录更改。特征兼容性版本保持不变。在检查运行后开始的索引构建仍然可能导致命令在后续失败。要重试该命令,首先等待索引构建完成或将其中止。
同步失败
如果在初始同步过程中更改 特征兼容性版本,同步可能会失败,并在 oplog 应用程序阶段重放条目时显示 OplogOperationUnsupported 错误。下一个同步会成功,因为操作阶段不再重放该操作。
Default Values
部署 | featureCompatibilityVersion |
|---|---|
对于新的8.3 部署 |
|
对于从 8.2 升级的 8.3 部署 |
|
对于新的8.0 部署 |
|
对于从 7.0 升级的 8.0 部署 |
|
对于新的 7.0 部署 |
|
从 6.0 升级的 7.0 部署 |
|
幂等
此命令必须对内部系统集合执行写入操作。如果命令未能成功完成,则可安全地重试。该操作是幂等的。
Cluster-to-Cluster Sync 和用户写入阻塞
从 MongoDB 6.0 开始,如果需要降级特征兼容性版本,请确保禁用集群到集群复制和用户写入阻止。
如果您启用了集群到集群复制,请将其禁用。
如果启用了用户写入阻止,请将其禁用:
db.runCommand( { setUserWriteBlockMode: 1, global: false } ) 等待上一条命令完成。
Downgrade the feature compatibility version using
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向后不兼容的功能
要启用保留与MongoDB 7.0 不兼容的数据的8.0 功能,请在MongoDB 8.0部署上将功能兼容性设立为 "8.0":
注意
Run the setFeatureCompatibilityVersion command against the admin database.
db.adminCommand( { setFeatureCompatibilityVersion: "8.0", confirm: true } )
禁用 8.0向后不兼容的功能
要禁用保留与MongoDB 7.0 不兼容的数据的8.0 功能,请在MongoDB 8.0部署上将功能兼容性设立为 "7.0":
注意
Run the setFeatureCompatibilityVersion command against the admin database.
"7.0"MongoDB 7.0 和MongoDB 8.0 部署支持 featureCompatibilityVersion。
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
如果您在从MongoDB 8.0 降级到MongoDB 7.0 的进程中运行此命令,则还必须删除所有与 7.0 不兼容的保留功能。请参阅相应的降级程序。
在 MongoDB 7.0 部署上设置功能兼容性版本
启用 7.0 向后不兼容的功能
要启用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"7.0":
注意
Run the setFeatureCompatibilityVersion command against the admin database.
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
禁用 7.0 向后不兼容的功能
要禁用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"6.0":
注意
Run the setFeatureCompatibilityVersion command against the admin database.
"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 秒)。
注意
Run the setFeatureCompatibilityVersion command against the admin database.
db.adminCommand( { setFeatureCompatibilityVersion: "5.0", writeConcern: { wtimeout: 5000 } } )
故障排除
If you experience startup issues after setting your feature compatibility version, contact MongoDB Support for assistance.