我今天有个悲伤的故事。我失去了我星期六以来所做的所有数据库更改。
我们使用mongodb (3.4.1),在这个特定的例子中,它运行在其官方的带有映射卷的对接容器中。
容器是用docker创建的,docker-compose.yml如下所示:
version: "2"
services:
database:
image: mongo:3.4.1
restart: always
container_name: cvs-db
volumes:
- ~/data/db:/data/db
ports:
- "27017:27017"~/data/db只是很久以前创建的一个常规文件夹。
在重新启动容器(使用docker-compose up -d)之后,数据返回到两天前的状态。甚至缺失也消失了。
我们昨天清理了所有的集合,并开始用真实的数据填充它们,现在它包含了我们最近删除的所有测试数据。
因此,我的问题是: 1)如何保护mongodb数据不受这些灾害的影响? 2)有人能分辨出可能导致这些结果的确切情况吗? 3)如何恢复数据?
编辑:经过一些研究,我认为是船坞组成的错误。但这些问题仍然有效:)
发布于 2017-01-24 21:28:18
查看您的撰写文件,您将源dir引用为相对~/data/db。如果系统上有多个可以访问组成文件的用户帐户(即根加上一个命名的用户帐户),那么"~/data/db"目录将根据启动容器的用户运行的不同而有所不同。也许类似的事情发生在你的环境里。
最好是使用到达主机卷的绝对路径(即/opt/data/db:/data/db),而不是根据用户或父目录上下文进行更改,以避免出现这种类型的问题。
使用标准主机目录作为数据卷不应导致数据自发回滚。如果上面提到的目录上下文没有问题,那么它可能涉及到其他一些因素,比如某个人恢复文件系统快照、恢复备份或直接更改DB。
https://stackoverflow.com/questions/41837893
复制相似问题