【问题标题】:MongoDB Backup and Docker ProblemsMongoDB 备份和 Docker 问题
【发布时间】:2020-07-20 16:01:50
【问题描述】:

我数周试图从我的 docker 进行备份,但没有任何成功。

我的 Docker 撰写:

services:
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: user
      MONGO_INITDB_ROOT_PASSWORD: password
    networks:
      - internal
    volumes:
      - /opt/rpg/mongo/data:/data/db

输入:docker exec mongo sh -c 'exec mongodump -d rpg --archive' > /home/rpg/all-collections.archive

输出:Failed: error getting collections for database rpg: error running listCollections. Database: rpg Err: command listCollections requires authentication

然后我尝试了密码

输入:docker exec mongo sh -c 'exec mongodump -d rpg —uri="mongodb://user:password@mongo:27017/rpg?authSource=admin" --archive' > /home/rpg/all-collections.archive

输出:SASL authentication step: Authentication failed.

经过数周的尝试,我得到了与:

sudo docker run -it --rm --network internal mongo \
    mongo --host mongo \
        -u user \
        -p password \
        --authenticationDatabase admin \
        rpg

现在我可以看到收藏和所有内容,但我仍然无法获得备份。

也试过了:

输入:

sudo docker run --rm --network internal mongo \
    mongodump --host mongo \
        -u user \
        -p password \
        --authenticationDatabase admin \
        --db rpg
    > ~/rpg2-collections.archive

输出:

Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.

没有成功,有人可以帮助我吗?

【问题讨论】:

  • 你试过mongodump --db dbName --username userName --password password --authenticationDatabase adminOrAnythingElse吗?
  • 是的,我做到了。 mongodump --db rpg --username 用户 --password 密码 --authenticationDatabase admin
  • 结果如何?我建议您在容器内测试您的命令(使用docker exec -it mongo sh)以绕过执行docker run 可能出现的问题,并在找到正确的mongodump 命令后,尝试从容器外部运行它。

标签: mongodb docker docker-compose backup


【解决方案1】:

遇到同样的身份验证问题,此命令有效:

docker exec <docker_container_name> sh -c 'mongodump --uri="mongodb://username:password@localhost:27017/db_name?authSource=admin&readPreference=primary" --archive' > db.dump

【讨论】:

    【解决方案2】:

    我是这样做的:

    mongodump --host='{mongo_server}' --db='{mongo_db}' --collection='{collection_name}' --out={output_folder}
    

    它工作得很好。 尽管如您所见,我正在通过单独主机上的 python 脚本通过集合转储进行收集,因为我无法一次备份所有内容。

    所以第一步是从装有 mongo 客户端的容器中获取所有集合:

    mongo {mongo_server}/{mongo_db} --eval 'db.getCollectionNames()' --quiet
    

    我的脚本还将每个集合转储上传到 s3 存储桶 s3cmd,这就是为什么您只看到其中的一部分...

    【讨论】:

    • 我一直遇到同样的问题,身份验证。
    【解决方案3】:

    几周后,我从文件(不是 mongodump)中获得备份。

    sudo tar czvf /home/backup.tar.gz /opt/rpg/mongo
    

    我进行了维修并在我的电脑上工作。

     mongod --repair ./{{folder}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2015-10-21
      相关资源
      最近更新 更多