我正在尝试为Mongo中的每个数据库创建一个归档文件。有没有办法创建一个批处理文件,它将自动为每个数据库创建一个存档(.archive),而无需我手动输入数据库名称?
提供的snipet
mongodump --host hostename --port portname --username username --password password --authenticationDatabase admin --db databasename --archive=name.arvhive
我想创建存档文件而不必指定数据库名称。这可能吗?如果没有,有没有办法转储所有数据库并为每个数据库创建一个gzip?
非常感谢任何协助。
谢谢!
答案 0 :(得分:0)
为了在mongo实例中获取数据库名称,我们需要使用mongo show dbs
命令。
由于我们希望能够在脚本中使用此命令,因此我们希望运行该命令并退出mongo cli,为此,我们可以将js
文件传递给mongo,如下所示:
$ echo "show dbs" > showDbs.js
$ mongo < showDbs.js
这将导致类似的结果
MongoDB shell version v3.4.22
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.22
admin 0.000GB
animals 0.366GB
people 0.012GB
local 0.000GB
bye
由于我们需要解析结果,因此可以使用--quiet
选项来减少输出。我们也可以跳过创建showDbs.js
文件的过程,这样我们以后就不必清理它了。
现在我们有:
$ mongo --quiet <<< "show dbs"
admin 0.000GB
animals 0.366GB
people 0.012GB
local 0.000GB
剩下要做的就是解析结果以删除数据库大小,然后为每个数据库运行mongodump
命令(我将原样保留该命令)
要删除每个数据库的大小信息,我们将使用sed
并匹配一个空格,因为数据库名称中不允许使用空格
$ sed 's/\s\+.\+//' <<< "$dbs"
将所有内容放在一起,我们得到以下脚本
#!/bin/bash
dbs=$(mongo --quiet <<< "show dbs")
dbs=$(sed 's/\s\+.\+//' <<< "$dbs")
for db in $dbs; do
mongodump --host hostname --port portname --username username --password password --authenticationDatabase admin --db $db --archive=$db.archive
done