MongoDB 备份和 Docker 问题

MongoDB Backup and Docker Problems

我花了几周的时间尝试从我的 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

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

也尝试过:

输入:

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 --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,这就是为什么您只看到其中一部分的原因...

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

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

然后我修理了我的电脑并开始工作。

 mongod --repair ./{{folder}}

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

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