小编典典

您如何重命名MongoDB数据库?

sql

我的MongoDB数据库名称中有一个错字,我想重命名该数据库。

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

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

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


阅读 180

收藏
2021-04-15

共1个答案

小编典典

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

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

.ns文件
集合的每个编号文件
每个索引的名称空间
每个集合和索引的内部唯一名称
system.namespaces和system.indexes的内容(或将来的等效内容)
我可能想念的其他地方
这仅仅是为了在独立的mongod实例中完成单个数据库的重命名。对于副本集,需要在每个副本节点上完成上述操作,此外,在每个节点上,必须以某种方式使引用该数据库的每个操作日志条目无效或重写,然后,如果它是分片群集,则还需要添加这些如果分片了数据库,则对每个分片都会进行更改,此外,配置服务器具有所有具有名称全名的分片元数据。

绝对不可能在实时系统上执行此操作。

要离线执行此操作,将需要重新写入每个数据库文件以容纳新名称,这时它将和当前的“ copydb”命令一样慢…

2021-04-15