我的MongoDB数据库名称中有一个错字,我想重命名该数据库。
我可以像这样复制和删除…
db.copyDatabase('old_name', 'new_name'); use old_name db.dropDatabase();
是否有用于重命名数据库的命令?
不,没有。参见https://jira.mongodb.org/browse/SERVER-701
不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这对我们来说不是一个简单的功能。在MMAPv1文件中,描述每个单个集合和索引的名称空间(例如:dbName.collection)都包含数据库名称,因此要重命名一组数据库文件,则必须重写每个名称空间字符串。这会影响:
.ns文件 集合的每个编号文件 每个索引的名称空间 每个集合和索引的内部唯一名称 system.namespaces和system.indexes的内容(或将来的等效内容) 我可能想念的其他地方 这仅仅是为了在独立的mongod实例中完成单个数据库的重命名。对于副本集,需要在每个副本节点上完成上述操作,此外,在每个节点上,必须以某种方式使引用该数据库的每个操作日志条目无效或重写,然后,如果它是分片群集,则还需要添加这些如果分片了数据库,则对每个分片都会进行更改,此外,配置服务器具有所有具有名称全名的分片元数据。
绝对不可能在实时系统上执行此操作。
要离线执行此操作,将需要重新写入每个数据库文件以容纳新名称,这时它将和当前的“ copydb”命令一样慢…