首页 > 解决方案 > mongodump 和 mongorestore 之后,mongodb 丢弃的集合不断返回

问题描述

我刚刚创建了一个数据集,但是一个集合“项目”仍然潜伏着,我正在使用命令db.items.drop()(在执行到我的 docker 容器后)摆脱它,这似乎成功地删除了它。但是当我运行以下 2 个脚本时(删除集合后):

保存脚本:

#!/usr/bin/env bash

MONGO_DB_NAME="test-1"
DATA_NAME="test-data"

docker exec ${MONGO_DB_NAME} mongodump --quiet --out /tmp/${DATA_NAME}
mkdir -p ./backup
docker cp ${MONGO_DB_NAME}:/tmp/${DATA_NAME} ./backup/${DATA_NAME}
docker exec ${MONGO_DB_NAME} rm -rf /tmp/${DATA_NAME}

恢复脚本:

#!/usr/bin/env bash

MONGO_DB_NAME="test-1"
DB_NAME="docker-node-mongo"
DATA_NAME="test-data"

docker exec -it $(docker ps -aqf "name=${MONGO_DB_NAME}") mongo ${DB_NAME} --eval "db.dropDatabase();"
docker cp ./backup/$DATA_NAME $(docker ps -aqf "name=${MONGO_DB_NAME}"):/tmp
docker exec -it $(docker ps -aqf "name=${MONGO_DB_NAME}") mongorestore --drop /tmp/${DATA_NAME}

项目集合马上回来。有人知道为什么吗?我希望它永远消失。

编辑:当我从集合中删除单个项目并运行上述脚本时,它们不会回来。但是当我放弃整个收藏时,收藏会不断回来(里面什么都没有)。

标签: mongodbdocker

解决方案


mongodump 命令不会删除--out路径中已存在的文件。正在备份的集合文件将被覆盖,但不再存在的集合文件不会被触及,留下“项目”文件,以便在下次运行 mongorestore 时恢复。

为确保不会发生这种情况,请移开或删除现有的备份目录,并在运行 mongodump 之前创建一个新的空目录。


推荐阅读