小编典典

如何重命名 MongoDB 数据库?

all

我的 MongoDB 数据库名称中有错字,我正在寻找重命名数据库。

我可以像这样复制和删除…

db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();

是否有重命名数据库的命令?


阅读 209

收藏
2022-03-09

共1个答案

小编典典

不,没有。见https://jira.mongodb.org/browse/SERVER-701

不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这对我们来说不是一个简单的功能。在 MMAPv1
文件中,描述每个集合和索引的命名空间(例如:dbName.collection)包括数据库名称,因此要重命名一组数据库文件,必须重写每个命名空间字符串。这会影响:

  • .ns 文件
  • 集合的每个编号文件
  • 每个索引的命名空间
  • 每个集合和索引的内部唯一名称
  • system.namespaces 和 system.indexes 的内容(或将来的等价物)
  • 我可能会错过的其他地点

这只是为了在独立 的mongod
实例中完成单个数据库的重命名。对于副本集,需要在每个副本节点上完成上述操作,并且在每个节点上,引用该数据库的每个 oplog
条目都必须以某种方式无效或重写,然后如果它是一个分片集群,还需要添加这些如果对数据库进行分片,则对每个分片进行更改,此外,配置服务器具有所有分片元数据,包括名称空间及其全名。

在实时系统上绝对没有办法做到这一点。

要离线进行,需要重新编写每个数据库文件以适应新名称,此时它会像当前的“copydb”命令一样慢......

2022-03-09