问题描述:

使用已存在的MongoDB服务文件夹进行创建协同服务,显示创建成功并正在运行, 但连接失败。

在这里插入图片描述

解决思路:

原来的A2DB文件创建出来的协同权限有问题,使用无权限服务连接之后将数据导出,重新创建正确的有权限的协同服务,并将数据恢复。

(PS:这个思路是将原来问题绕开导出数据的方式,如果有更直接的方式欢迎指正~)

解决方法记录:

1、使用命令进行查看副本集的状态

以本机Mongo路径为例:
在这里插入图片描述

首先cd到mongod.exe所在的bin文件夹下,cd /d H:\zwpd_3.4\ThirdPart\MongoDB\Server\4.2\bin

使用 mongo host:port 命令连接服务

使用 rs.status() 命令查看副本集的状态。发现当前副本集节点状态为OTHER。切换其他端口连接后节点状态都是OTHER。

在这里插入图片描述

2、创建无权限服务,重新配置副本集

先断开删除mongodb服务,创建无权限的mongodb服务。

##这里的变量是以本机为例,实际运用时需要注意对应路径
SET REAL_IP=10.0.0.115
SET REAL_PORT=27700
SET replayset=A2DB
set server_name_a2db=A2DB Server
set server_name_a2db_replica1=A2DB Server Replica Set 1
set server_name_a2db_replica2=A2DB Server Replica Set 2
set softpath=%~dp0..
set thirdPath=%softpath%/ThirdPart
set mongod=%thirdPath%/MongoDB/Server/4.2/bin/mongod.exe
set dbpath=%softpath%/A2DB
set logpathmain=%dbpath%/main.log
set logpath1=%dbpath%/replica_1.log
set logpath2=%dbpath%/replica_2.log
set dbpathmain=%dbpath%/Main_data
set dbpath1=%dbpath%/replica_set_data1
set dbpath2=%dbpath%/replica_set_data2
set configpath=%thirdPath%/A2DB.cfg

sc create "%server_name_a2db%" binpath= """"%mongod%""" --port 27700 --logpath """%logpathmain%""" --dbpath """%dbpathmain%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip
sc create "%server_name_a2db_replica1%" binpath= """"%mongod%""" --port %REAL_PORT1% --logpath """%logpath1%""" --dbpath """%dbpath1%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip
sc create "%server_name_a2db_replica2%" binpath= """"%mongod%""" --port %REAL_PORT2% --logpath """%logpath2%""" --dbpath """%dbpath2%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip


检查服务是否已正在运行:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NsPckOrH-1634355385765)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016104822892.png)]

在终端进行连接并使用 rs.status() 查看副本集状态:提示无效的副本集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DOmWDhg-1634355385767)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016105359004.png)]

使用 rs.config() 查看副本集配置,发现副本集的节点配置中的host还是客户的IP地址,并不是自己本机的IP地址:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbgC7byX-1634355385767)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016105559842.png)]

此时需要修改配置并重置副本集:

config = rs.conf()
config.members[0].host = "10.0.0.115:27700"
config.members[1].host = "10.0.0.115:27701"
config.members[2].host = "10.0.0.115:27702"
rs.reconfig(config,{"force":true})

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbUmIt0I-1634355385768)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016110112803.png)]

发现当前节点状态已经变为SECONDARY,此时查看副本集状态可以发现节点的host和状态都已经正常:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-euvsGBqD-1634355385769)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016110353636.png)]
在这里插入图片描述

当前连接的27700端口的节点状态也已经变为PRIMARY。

在这里插入图片描述

3、导出数据

使用 show dbs 可以看到当前所有数据库:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyT6iHXH-1634355385773)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016110814218.png)]

此时退出连接,使用 mongodump -h host --port -o outDir 命令导出所有数据库数据。

在这里插入图片描述

4、重新创建服务,并恢复数据

断开协同库连接,并将A2DB重命名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWOdo5FJ-1634355385778)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016112222954.png)]

重新创建有权限协同服务。

set dbpath=%softpath%/A2DB
set logpathmain=%dbpath%/main.log
set logpath1=%dbpath%/replica_1.log
set logpath2=%dbpath%/replica_2.log
set dbpathmain=%dbpath%/Main_data
set dbpath1=%dbpath%/replica_set_data1
set dbpath2=%dbpath%/replica_set_data2
set configpath=%thirdPath%/A2DB.cfg
set ssh_key_gen=%thirdPath%/ssh_keygen/ssh-keygen.exe
set keypath=%thirdPath%/A2DB.key
set realkeypath=%thirdPath%/A2DB-real.key
set dbpath=%softpath%/A2DB
set logpathmain=%dbpath%/main.log
set logpath1=%dbpath%/replica_1.log
set logpath2=%dbpath%/replica_2.log
set dbpathmain=%dbpath%/Main_data
set dbpath1=%dbpath%/replica_set_data1
set dbpath2=%dbpath%/replica_set_data2
set configpath=%thirdPath%/A2DB.cfg
set ssh_key_gen=%thirdPath%/ssh_keygen/ssh-keygen.exe
set keypath=%thirdPath%/A2DB.key
set realkeypath=%thirdPath%/A2DB-real.key

"%ssh_key_gen%" -q -b 1024 -f "%keypath%" -P "%USER%" -N "%KEY_FILE_PWD%"
for /f "usebackq eol=- tokens=* skip=4" %%i in ("%keypath%") do echo %%i>>"%realkeypath%"

sc create "%server_name_a2db%" binpath= """"%mongod%""" --port %REAL_PORT% --logpath """%logpathmain%""" --dbpath """%dbpathmain%""" --keyFile """%realkeypath%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip
echo 91 > "%progress_path%"
sc create "%server_name_a2db_replica1%" binpath= """"%mongod%""" --port %REAL_PORT1% --logpath """%logpath1%""" --dbpath """%dbpath1%""" --keyFile """%realkeypath%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip
echo 92 > "%progress_path%"
sc create "%server_name_a2db_replica2%" binpath= """"%mongod%""" --port %REAL_PORT2% --logpath """%logpath2%""" --dbpath """%dbpath2%""" --keyFile """%realkeypath%""" --config """%configpath%""" --replSet %replayset% --service " start= auto depend= Tcpip

成功启动之后,使用 mongorestore --host host:port -u username -p password --dir fileDir 恢复数据

mongorestore --host "A2DB/10.0.0.115:27700,10.0.0.115:27701,10.0.0.115:27702" -u "admin" -p "5382DF4748760FA5ABD91213B1EF4621E7DD8002333121170912B42922823FEE" --dir "H:\zwpd_3.4\A2DBData"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESfIcGTz-1634355385781)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016112732839.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmRgteBf-1634355385783)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016112745987.png)]

此时在MongoDB Compass中就可以看到数据库了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fk3upNxr-1634355385785)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211016113219207.png)]

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐