如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)

最近购买了1台腾讯云轻量服务器做测试,想在上面安装MongoDB数据库。但安装过程并不顺利,遇到了几个问题。本文记录一下安装过程及遇到的问题和解决方法。

一、软件下载地址:

1.直接打开MongoDB官网:https://www.mongodb.com/
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第1张图片

点击产品菜单发现社区版本下载地址:
https://www.mongodb.com/try/download/community
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第2张图片

二、版本选择:

打开页面拖动到版本选择,因为以前在本地电脑上安装时直接点击了Download然后一路点击next就安装成功了,过程非常简单,所以这次仍然直接下载,等了半天后下载完了安装却提示仅支持Windows10及更高版本。

因为这个云服务器提供的系统镜像版本是Windows Server 2012,相当于Win7。
在网上查了资料还特意问了chat-gpt,推荐适合Win7和Windows Server 2012的版本是 4.4版本,但是下载4.4后安装仍然提示不支持当前操作系统。

中间因为试了好几个版本都不行,折腾了半天,看到MongoDB官网上说有云数据库可以直接使用,不需要自己安装维护,于是还特意注册了一个账户开通了一个限额512M免费使用的MongoDB数据库,开通后在本地连接测试了一下,发现只能通过MongoDB Compass客户端软件连接,在Python里通过pymongo库一直连接失败,老是提示出错。

# 连接MongoD官方云数据库
conn_str = "mongodb+srv://yanglingreat:[email protected]/?retryWrites=true&w=majority"
client = pymongo.MongoClient(conn_str, serverSelectionTimeoutMS=10000)
try:
    print(client.server_info())
except Exception as e:
    print("不能连接到数据库:%s"%e)

输出错误信息:

ConfigurationError: The DNS response does not contain an answer to the question: _mongodb._tcp.cluster0.zdxsvqr.mongodb.net. IN SRV

根据文档指导排查错误后仍然连接不上,只得放弃。又想到是否阿里云或腾讯云可以提供MongoDB云数据库,上了网站一查发现价格太高,最便宜的一年也要好几千块甚至上万元。我这个作为个人测试用,肯定舍不得付出那么高的成本。

不得不回到自己安装,几经折腾后发现4.2.4版本可以成功安装,安装过程倒是很简单,按照提示一步步Next就行了。安装的时候可以修改默认安装路径,方便后期维护,另外默认会有一个开机自动启动服务的选项,不用每次手动启动。
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第3张图片

三、文件目录:

安装完成后的文件目录如下图:
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第4张图片
运行程序和配置文件在bin目录,数据在data目录,日志在log目录。
bin目录:mongo.exe是数据库管理shell程序,mongod.cfg是启动配置文件,mongod.exe是数据库主程序。
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第5张图片
MongoDB Shell程序界面:
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第6张图片
数据文件目录:
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第7张图片

日志文件mongod.log,打开可以看到详细的过程记录。
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第8张图片
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第9张图片

安装成功并运行后,可以在任务管理器里看到MongoDB进程在运行:
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第10张图片

四、Python连接数据库:

数据库安装成功并运行后,在Python里使用相应的MongoDB连接库pymongo进行了测试,发现使用默认的本地地址localhost 和127.0.0.1连接数据库成功(关于pymongo库的使用方法可以看我另外的一篇文章:
在Jupyter Notebook使用Python连接MongoDB数据库并写入、查询数据
):

import pymongo
# 连接MongoDB数据库,标准格式需要用户名、密码、数据库地址和数据库名称
#标准格式:conn_str = "mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]"
#这是我安装在本地的数据库没有设置用户名和密码,可以直接连接
conn_str = "mongodb://localhost:27017"    
# 设置10秒(10000毫秒)的连接超时
client = pymongo.MongoClient(conn_str, serverSelectionTimeoutMS=10000)
try:
    print(client.server_info())
    print(client.list_database_names())
except Exception as e:
    print("不能连接到数据库.错误信息:",e)

Python程序成功返回了数据库信息,连接成功。

五、修改配置-绑定IP

由于这个安装在云服务器上的数据库需要网络远程访问,我把刚才的连接字符改成了我服务器的外网IP地址:

conn_str = "mongodb://88.88.88.88:27017"   #这里的IP地址仅仅是一个示范

发现无法连接,我把IP地址改成127.0.0.1后,又连接成功。以为是防火墙设置的问题,把防火墙的27017端口打开了,还是不行。

于是网上查资料又是问chat-gpt,得到的答案都是说要修改配置文件mongod.cfg中的绑定ip项目:

net:
port: 27017
bindIp: 服务器外网IP,127.0.0.1

用记事本打开位于bin目录下的mongod.cfg文件,找到bindip,
我按照上面的格式添加了我的服务器公网IP地址,
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第11张图片

重新启动MongoDB,居然提示服务无法启动:
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第12张图片

然后在Python里连接,自然是连接不上。我甚至还尝试了把127.0.0.1删掉,仅保留一个服务器的IP地址,仍然失败了。
反复查资料反复修改反复重启,搞了好久一直没成功。最后都想放弃远程访问这个数据库了。结果还是不死心,想起来说如果要绑定所有IP地址可以把ip修改成0.0.0.0,结果这样一改,MongoDB竟然启动成功了!
然后试了Python程序,使用公网服务器IP地址访问连接正常!

因为这个Python程序也是在这台云服务器上,不是真正的远程连接,于是打开了腾讯云服务器的防火墙控制中心,添加了允许27017端口打开的规则。
然后在本地电脑上使用Python进行连接,MongoDB也连接成功,返回了数据库信息。

至此,在腾讯云轻量服务器Windows Server 2012R2上安装MongoDB数据库,并允许Python远程连接的过程顺利结束。

虽然问题解决了,但我仍然不知道为什么把这个bindIp改成0.0.0.0可以成功,改成服务器的实际IP却不行。

六、添加用户名和密码安全认证

MongoDB默认安装后访问数据库是不需要用户名和密码就能访问的,任何知道IP地址的人都能连接,这是有很大安全隐患的。需要添加用户名和密码验证功能。还是使用前面提到的MongoDB Shell管理程序(在安装目录下,文件名为mongo.exe)添加用户名和密码,并修改mongod.cfg配置文件启用安全热证。具体操作可以参考在百度上查到的一篇文章:
如何在MongoDB中启用身份验证?
如何在云服务器上成功安装MongoDB数据库并用Python连接(问题及解决方法)_第13张图片

感悟:

有时候不熟悉的东西使用起来就像打怪一样,一个问题解决了又冒出另外一个问题,如果没有很好的钻研精神和耐心,还挺难搞定的。

写这篇文章进行记录并分享。

你可能感兴趣的:(数据库,mongodb,python)