背景: 用docker安装的mongo,并设置了一个副本集。且用rs.initiate()初始化过。长时间没用了,突然打开就报错了。想知道如何可以把数据保留下来且修复这个问题。
用rs查看mongo状态如下:
> rs.status()
{
“ok” : 0,
“errmsg” : “Our replica set config is invalid or we are not a member of it”,
“code” : 93,
“codeName” : “InvalidReplicaSetConfig”
}
> rs.conf().members
[
{
“_id” : 0,
“host” : “242f13dd6839:27017”,
“arbiterOnly” : false,
“buildIndexes” : true,
“hidden” : false,
“priority” : 1,
“tags” : {
},
“slaveDelay” : NumberLong(0),
“votes” : 1
}
]
添加节点时报错:
{
“topologyVersion” : {
“processId” : ObjectId(“60ae136dda794cff135bcf27”),
“counter” : NumberLong(1)
},
“ok” : 0,
“errmsg” : “New config is rejected :: caused by :: replSetReconfig should only be run on a writable PRIMARY. Current state REMOVED;”,
“code” : 10107,
“codeName” : “NotWritablePrimary”
}
本地解决办法:删除原docker镜像以及容器,重新安装一遍就好了。
问题已解决,只需重新配置replica。rs.reconfig({_id: “dev”,version: 1,members: [{ _id: 0, host : “localhost:27017” }]},{force:true})。 (force -> 非主节点强制请求重新分配主节点。)
看到报错,感觉是您两次启动 mongo 使用的命令不一致导致,可否贴一下两次的启动命令
想知道如何可以把数据保留下来且修复这个问题
有多种方式:
看一下 mongo 配置文件,找到数据存放目录,拷贝下来,然后以单节点启动即可
这个是初始化容器的命令:
mongodb:
image: mongo
ports:
– 27017:27017
networks:
– local
volumes:
– “C:/docker/mongodb_data:/data/db”
command: [“mongod”, “–replSet”, “dev”]
长时间没用后,我用Windows的docker界面启动容器,然后用navicat 去连接时就报了上面的错误。
中间没有特别的行为。
我只是在win10中用docker 启动了一个mongo镜像:
mongodb:
image: mongo
ports:
– 27017:27017
networks:
– local
volumes:
– “C:/docker/mongodb_data:/data/db”
command: [“mongod”, “–replSet”, “dev”]
然后长时间不用,有天连接时候报了错。所以感觉很疑惑。
我只是在win10中用docker 启动了一个mongo镜像:
mongodb:
image: mongo
ports:
– 27017:27017
networks:
– local
volumes:
– “C:/docker/mongodb_data:/data/db”
command: [“mongod”, “–replSet”, “dev”]
然后长时间不用,有天连接时候报了错。所以感觉很疑惑。