我的 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 实例中完成单个数据库的重命名。对于副本集,需要在每个副本节点上完成上述操作,并且在每个节点上,引用该数据库的每个 oplog 条目都必须以某种方式无效或重写,然后如果它是一个分片集群,还需要添加这些如果对数据库进行分片,则对每个分片进行更改,此外,配置服务器具有所有分片元数据,包括名称空间及其全名。 在实时系统上绝对没有办法做到这一点。 要离线进行,需要重新编写每个数据库文件以适应新名称,此时它会像当前的“copydb”命令一样慢......
不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这对我们来说不是一个简单的功能。在 MMAPv1 文件中,描述每个集合和索引的命名空间(例如:dbName.collection)包括数据库名称,因此要重命名一组数据库文件,必须重写每个命名空间字符串。这会影响:
这只是为了在独立 的mongod 实例中完成单个数据库的重命名。对于副本集,需要在每个副本节点上完成上述操作,并且在每个节点上,引用该数据库的每个 oplog 条目都必须以某种方式无效或重写,然后如果它是一个分片集群,还需要添加这些如果对数据库进行分片,则对每个分片进行更改,此外,配置服务器具有所有分片元数据,包括名称空间及其全名。
在实时系统上绝对没有办法做到这一点。
要离线进行,需要重新编写每个数据库文件以适应新名称,此时它会像当前的“copydb”命令一样慢......