【问题标题】:Using mongodump to create a single file for each mongo database使用 mongodump 为每个 mongo 数据库创建一个文件
【发布时间】:2017-08-02 18:35:03
【问题描述】:

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

提供的片段

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

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

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: mongodb batch-file mongodump


    【解决方案1】:

    为了获取 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多