【问题标题】:tar gzip mongo dump like MySQLtar gzip mongo dump 像 MySQL
【发布时间】:2021-04-27 20:01:05
【问题描述】:

是否可以像使用 MySQL 转储一样 tar gzip mongo 转储?

例如,对于mysqldumps,你可以这样写一个命令:

mysqldump -u <username> --password=<password> --all-databases | gzip > all-databases.`date +%F`.gz

对于 mongo 转储是否有等效的方法?

对于 mongo 转储,我运行以下命令:

mongodump --host localhost --out /backup

有没有办法将它通过管道传输到 gzip?我试过了,但是没有用。

有什么想法吗?

【问题讨论】:

  • 如果您运行 mongodump --help 您将看到一个输出到标准输出的选项,即 --out "-" 。这应该允许您像使用 mysql 一样通过管道进入 gzip。我还没有测试,但值得一试。
  • 如果你不能像使用 MySQL 那样做,comamand 所做的只是将 mysqldump 结果通过管道传输到 gzip,本机 linux 功能

标签: mongodb


【解决方案1】:

3.2 版引入了gziparchive 选项:

mongodump --db &lt;yourdb&gt; --gzip --archive=/path/to/archive

然后你可以恢复:

mongorestore --gzip --archive=/path/to/archive

【讨论】:

  • 以上恢复,正在恢复到同一个数据库。如何恢复到不同的数据库?
  • @SHIVA 在 mongodump 中,--db databaseName 是源数据库,在 mongorestore --db databaseName 是要恢复到的目标数据库。
  • 存档格式甚至允许您跳过命名中间文件而直接作为流工作:mongodump --archive | mongorestore --archive。当您必须通过 SSH 连接到有权进行转储的服务器时非常方便。
【解决方案2】:

更新(2015 年 7 月): TOOLS-675 现在标记为完成,这将允许转储到 3.2 中的存档格式,并且 gzip 将成为 3.2 版本的 mongodump/mongorestore 工具中的选项之一。一旦相关文档适用于 3.2,我将更新它们

原答案(3.0及以下):

您可以通过将mongodump 输出到stdout 来使用单个集合来执行此操作,然后将其通过管道传输到压缩程序(gzip、bzip2),但您只会获取数据(没有索引信息)并且您不能这样做现在是一个完整的数据库(多个集合)。此功能的相关功能请求是SERVER-5190,用于支持/观看。

下面是一个快速示例,了解可能的情况,在此示例中使用 bzip2

./mongo
MongoDB shell version: 2.6.1
connecting to: test
> db.foo.find()
{ "_id" : ObjectId("53ad8a3eb74b5ae2ff0ec93a"), "a" : 1 }
{ "_id" : ObjectId("53ad8ba445be9c4f7bd018b4"), "a" : 2 }
{ "_id" : ObjectId("53ad8ba645be9c4f7bd018b5"), "a" : 3 }
{ "_id" : ObjectId("53ad8ba845be9c4f7bd018b6"), "a" : 4 }
{ "_id" : ObjectId("53ad8baa45be9c4f7bd018b7"), "a" : 5 }
> 
bye
$ ./mongodump -d test -c foo -o - | bzip2 - > foo.bson.bz2
connected to: 127.0.0.1
$ bunzip2 foo.bson.bz2 
$ ./bsondump foo.bson
{ "_id" : ObjectId( "53ad8a3eb74b5ae2ff0ec93a" ), "a" : 1 }
{ "_id" : ObjectId( "53ad8ba445be9c4f7bd018b4" ), "a" : 2 }
{ "_id" : ObjectId( "53ad8ba645be9c4f7bd018b5" ), "a" : 3 }
{ "_id" : ObjectId( "53ad8ba845be9c4f7bd018b6" ), "a" : 4 }
{ "_id" : ObjectId( "53ad8baa45be9c4f7bd018b7" ), "a" : 5 }
5 objects found

将其与直接的mongodump 进行比较(您会得到相同的 foo.bson,但上面不包括描述索引的额外 foo.metadata.json):

$ ./mongodump -d test -c foo -o .
connected to: 127.0.0.1
2014-06-27T16:24:20.802+0100 DATABASE: test  to     ./test
2014-06-27T16:24:20.802+0100    test.foo to ./test/foo.bson
2014-06-27T16:24:20.802+0100         5 documents
2014-06-27T16:24:20.802+0100    Metadata for test.foo to ./test/foo.metadata.json
$ ./bsondump test/foo.bson 
{ "_id" : ObjectId( "53ad8a3eb74b5ae2ff0ec93a" ), "a" : 1 }
{ "_id" : ObjectId( "53ad8ba445be9c4f7bd018b4" ), "a" : 2 }
{ "_id" : ObjectId( "53ad8ba645be9c4f7bd018b5" ), "a" : 3 }
{ "_id" : ObjectId( "53ad8ba845be9c4f7bd018b6" ), "a" : 4 }
{ "_id" : ObjectId( "53ad8baa45be9c4f7bd018b7" ), "a" : 5 }
5 objects found

【讨论】:

    【解决方案3】:

    将MongoDB导出为

    mongodump --host <host-ip> --port 27017 --db <database>  --authenticationDatabase admin --username <username> --password <password> --gzip --archive >  dump_`date "+%Y-%m-%d"`.gz
    

    导入为

    mongodump --host <host-ip> --port 27017 --db <database>  --authenticationDatabase admin --username <username> --password <password> --gzip --archive=mongodump.gz
    

    【讨论】:

      【解决方案4】:

      如果你想为你的 MongoDB 副本集集群传递 uri

      转储:

      mongodump --uri='mongodb://user:pass@primary_host,secondary_host/<db-name>?replicaSet=<replica-name>&authSource=admin' --gzip --archive > dump_`date "+%Y-%m-%d"`.gz
      

      恢复:

      mongorestore --uri='mongodb://user:pass@primary_host,secondary_host/<db-name>?replicaSet=<replica-name>&authSource=admin' --gzip --archive=<dump-file>.gz
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        相关资源
        最近更新 更多