使用mongodump为每个mongo数据库创建一个文件

时间:2017-08-02 18:35:04

标签: mongodb batch-file mongodump

我正在尝试为Mongo中的每个数据库创建一个归档文件。有没有办法创建一个批处理文件,它将自动为每个数据库创建一个存档(.archive),而无需我手动输入数据库名称?

提供的snipet

mongodump --host hostename --port portname --username username --password password --authenticationDatabase admin --db databasename --archive=name.arvhive

我想创建存档文件而不必指定数据库名称。这可能吗?如果没有,有没有办法转储所有数据库并为每个数据库创建一个gzip?

非常感谢任何协助。

谢谢!

1 个答案:

答案 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