Bri*_*pel 456 database mongodb
我的MongoDB数据库名称中有一个拼写错误,我正在寻找重命名数据库.
我可以这样复制和删除......
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Run Code Online (Sandbox Code Playgroud)
是否有重命名数据库的命令?
bzm*_*zmw 385
你可以这样做:
db.copyDatabase("db_to_rename","db_renamed","localhost")
use db_to_rename
db.dropDatabase();
Run Code Online (Sandbox Code Playgroud)
编者注:这与问题本身使用的方法相同,但无论如何都证明对其他人有用.
pin*_*33n 191
不,没有.请参阅https://jira.mongodb.org/browse/SERVER-701
不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这不是我们实现的简单功能.在MMAPv1文件中,描述每个集合和索引的名称空间(例如:dbName.collection)包含数据库名称,因此要重命名一组数据库文件,必须重写每个单独的名称空间字符串.这会影响:
- .ns文件
- 集合的每个编号文件
- 每个索引的命名空间
- 每个集合和索引的内部唯一名称
- system.namespaces和system.indexes的内容(或将来的等价物)
- 我可能遗失的其他地方
这只是为了在独立的 mongod实例中完成单个数据库的重命名.对于副本集,需要在每个副本节点上完成上述操作,并且在每个节点上,引用此数据库的每个oplog条目都必须以某种方式无效或重写,然后如果它是分片群集,则还需要添加这些如果数据库是分片的,则更改为每个分片,并且配置服务器具有名称空间及其全名的所有分片元数据.
在实时系统上绝对没有办法做到这一点.
要离线执行,需要重新编写每个数据库文件以容纳新名称,此时它将与当前"copydb"命令一样慢...
tom*_*ako 150
替代解决方案:您可以转储数据库并以不同的名称还原它.正如我所经历的那样,它比它快得多db.copyDatabase().
$ mongodump -d old_db_name -o mongodump/
$ mongorestore -d new_db_name mongodump/old_db_name
Run Code Online (Sandbox Code Playgroud)
http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
Cha*_*ari 24
警告:如果您不想在单个数据库下搞乱不同的集合,请在复制数据库时小心.
以下显示如何重命名
> show dbs;
testing
games
movies
Run Code Online (Sandbox Code Playgroud)
要重命名,请使用以下语法
db.copyDatabase("old db name","new db name")
Run Code Online (Sandbox Code Playgroud)
例:
db.copyDatabase('testing','newTesting')
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过以下方式安全地删除旧数据库
use testing;
db.dropDatabase(); //Here the db **testing** is deleted successfully
Run Code Online (Sandbox Code Playgroud)
现在只考虑如果尝试使用现有数据库名称重命名新数据库名称会发生什么
例:
db.copyDatabase('testing','movies');
Run Code Online (Sandbox Code Playgroud)
因此,在此上下文中,所有测试集合(表格)都将复制到电影数据库中.
Rav*_*ina 15
从 4.2 版开始,copyDatabase已弃用。从现在开始,我们应该使用:mongodump和mongorestore。
假设我们有一个名为:的数据库old_name,我们想将其重命名为new_name.
首先,我们必须转储数据库:
mongodump --archive="old_name_dump.db" --db=old_name
Run Code Online (Sandbox Code Playgroud)
如果您必须以用户身份进行身份验证,请使用:
mongodump -u username --authenticationDatabase admin \
--archive="old_name_dump.db" --db=old_name
Run Code Online (Sandbox Code Playgroud)
现在我们将数据库转储为一个名为:old_name_dump.db.
要使用新名称恢复:
mongorestore --archive="old_name_dump.db" --nsFrom="old_name.*" --nsTo="new_name.*"
Run Code Online (Sandbox Code Playgroud)
同样,如果您需要进行身份验证,请将此参数添加到命令中:
-u username --authenticationDatabase admin
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.mongodb.com/manual/release-notes/4.2-compatibility/#remove-support-for-the-copydb-and-clone-commands
没有重命名数据库的机制。将在写作时目前公认的答案是正确的事实,并提供了一些有趣的背景细节为借口上游,但提供了复制的行为没有任何建议。其他答案指向copyDatabase,这不再是一个选项,因为该功能已在 4.0 中删除。我已经用我的笔记和怀疑更新了SERVER-701。
等效的行为涉及mongodump并mongorestore有点像舞蹈:
导出您的数据,记下正在使用的“命名空间”。例如,在我的一个数据集上,我有一个带有命名空间的集合byzmcbehoomrfjcs9vlj.Analytics——下一步将需要该前缀(实际上是数据库名称)。
导入您的数据、供应--nsFrom和--nsTo参数。(文档。)继续我上面假设的(并且非常不可读)的例子,为了恢复到一个更有意义的名字,我调用:
mongorestore --archive=backup.agz --gzip --drop \
--nsFrom 'byzmcbehoomrfjcs9vlj.*' --nsTo 'rita.*'
Run Code Online (Sandbox Code Playgroud)
有些人可能还会指出--dbmongorestore的论点,但是,这也已被弃用,并会触发警告,禁止在非 BSON 文件夹备份上使用,对“ use --nsInclude instead”提出完全错误的建议。上面的命名空间转换等效于使用该--db选项,并且是要使用的正确命名空间操作设置,因为我们不会尝试过滤正在恢复的内容。
尽管Mongodb不提供重命名数据库命令,但它提供了r ename Collection命令,它不仅可以修改集合名称,还可以修改数据库名称。
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})
Run Code Online (Sandbox Code Playgroud)
该命令仅修改元数据,代价很小,我们只需要遍历下的所有集合db1,就db2可以重命名以实现重命名数据库名称。
您可以在此Js脚本中完成
var source = "source";
var dest = "dest";
var colls = db.getSiblingDB(source).getCollectionNames();
for (var i = 0; i < colls.length; i++) {
var from = source + "." + colls[i];
var to = dest + "." + colls[i];
db.adminCommand({renameCollection: from, to: to});
}
Run Code Online (Sandbox Code Playgroud)
上面的过程很慢,您可以使用下面的方法,但是您需要将每个集合移到另一个数据库。
use admin
db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})
Run Code Online (Sandbox Code Playgroud)
小智 5
我试着做。
db.copyDatabase('DB_toBeRenamed','Db_newName','host')
Run Code Online (Sandbox Code Playgroud)
并知道它已被 mongo 社区弃用,尽管它创建了备份或重命名了 DB。
WARNING: db.copyDatabase is deprecated. See http://dochub.mongodb.org/core/copydb-clone-deprecation
{
"note" : "Support for the copydb command has been deprecated. See
http://dochub.mongodb.org/core/copydb-clone-deprecation",
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
所以不相信上述方法,我不得不使用以下命令转储本地
mongodump --host --db DB_TobeRenamed --out E://FileName/
Run Code Online (Sandbox Code Playgroud)
连接到 Db。
use DB_TobeRenamed
Run Code Online (Sandbox Code Playgroud)
然后
db.dropDatabase()
Run Code Online (Sandbox Code Playgroud)
然后用命令恢复数据库。
mongorestore -host hostName -d Db_NewName E://FileName/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148429 次 |
| 最近记录: |