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

news2024/11/23 11:14:07

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

一、软件下载地址:

1.直接打开MongoDB官网:https://www.mongodb.com/
在这里插入图片描述

点击产品菜单发现社区版本下载地址:
https://www.mongodb.com/try/download/community
在这里插入图片描述

二、版本选择:

打开页面拖动到版本选择,因为以前在本地电脑上安装时直接点击了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:xzes8XX8gb@cluster1.zdxsvqr.mongodb.net/?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就行了。安装的时候可以修改默认安装路径,方便后期维护,另外默认会有一个开机自动启动服务的选项,不用每次手动启动。
在这里插入图片描述

三、文件目录:

安装完成后的文件目录如下图:
在这里插入图片描述
运行程序和配置文件在bin目录,数据在data目录,日志在log目录。
bin目录:mongo.exe是数据库管理shell程序,mongod.cfg是启动配置文件,mongod.exe是数据库主程序。
在这里插入图片描述
MongoDB Shell程序界面:
在这里插入图片描述
数据文件目录:
在这里插入图片描述

日志文件mongod.log,打开可以看到详细的过程记录。
在这里插入图片描述
在这里插入图片描述

安装成功并运行后,可以在任务管理器里看到MongoDB进程在运行:
在这里插入图片描述

四、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里连接,自然是连接不上。我甚至还尝试了把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却不行。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 Google 开发者大会:助力传承和弘扬传统文化

文章目录 前言一、关于 Google 开发者大会1.1、什么是 Google 开发者大会?1.2、CSDN 上线 2023 Google 开发者大会专题页 二、敦煌深厚的艺术沉淀2.1、“云想衣裳花想容”?2.2、“大漠孤烟直,长河落日圆” 三、传统文化赋予现代艺术设计灵感四…

1.IAR-8051安装

新版安装教程:IAR EW for 8051 简介与安装 新版软件zhuce:IAR EW for 8051 软件注册 - 知乎 这个新版的我也放到网盘里面了,自己自行选择安装 一、下载IAR-8051 链接:https://pan.baidu.com/s/1mYwSQvSjAiSzltrEbK3yAw?pwd43cd …

IPV4和IPV6,公网IP和私有IP有什么区别?

文章目录 1、什么是IP地址?1.1、背景1.2、交换机1.3、局域网1.4、广域网1.5、ISP 互联网服务提供商 2、IPV42.1、什么是IPV4?2.2、IPV4的组成2.3、NAT 网络地址转换2.4、端口映射 3、公网IP和私有IP4、IPV6 1、什么是IP地址? 1.1、背景 一台…

接口调用三种方式

创建服务端 一个controller,一个启动类,配置端口 controller import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController public class ServerController {Req…

uniapp开发h5 遇到一个刻度尺的需求 实现记录

先上最终实现图 实现这个功能使用的是github上找的一个库 叫slide-ruler 地址 实现思路: 第一步:在终端npm 下载这个依赖 第二步:新建一个刻度尺自定义组件,如果不是自定义组件会不生效,并且这个自定义组件里面放一…

用无代码搭建数据中台,竟做到如此丝滑

文章目录 需求背景系统介绍配置说明1 菜单导航2 系统自带组件导入页面(1)数据集成相关组件(2)数据服务相关组件 3 由系统组件路径添加页面(1)数据资产管理(2)数据标准管理&#xff0…

Hutool工具包:http客户端工具(使用教程)

目录 一、Hutool介绍 二、笔者的话 三、引入依赖 四、大致步骤 五、GET请求 5.1 代码 5.2 结果展示 六、POST请求 6.1 代码一(Form Data类型参数) 6.2 结果展示 6.3 代码二(Form Data类型参数 - 含上传文件) 6.4 结果…

idea设置项目启动的JVM运行内存大小

idea设置项目启动的JVM运行内存大小 场景 在开发当中,idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候,根本不需要1G内存,200M左右足以 如果在微服务体系下,那效果更明显,相同的内存可以启动更多的…

Linux学习之Redis集群部署

Redis集群部署 准备集群环境 创建集群 # 准备集群环境--配置192.168.88.51(host51) [rootlocalhost ~]# yum install -y redis [roothost51 ~]# vim /etc/redis.conf bind 192.168.88.51 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000…

Java web基础知识

Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet ,一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做,Servlet 初步…

成功的海外网红营销:文化和价值观冲突的应对策略

随着全球数字化和社交媒体的崛起,海外网红营销已经成为企业推广产品和服务的一种重要方式。然而,这种全球性的营销活动也伴随着文化和价值观的多样性,容易导致潜在的冲突和误解。为了取得成功并避免不必要的争议,企业需要深入了解…

从B-21轰炸机看美空军作战战略趋势

源自:北京蓝德信息科技有限公司 图注:The B-21 Raider was unveiled to the public at a ceremony Dec. 2, 2022, in Palmdale, Calif. (U.S. Air Force photo) (一)B-21开发进展 (二)B-21性能研判 声明:公众号转载的文章及图片出于非商业性的教育和科研…

2023 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开

安全之安全(security)博客目录导读 目录 一、幻灯片地址 二、演讲视频 一、幻灯片地址: GitHub - cnrv/RVSC2023: RISC-V Summit China 2023 二、演讲视频: RISCV国际基金会的个人空间-RISCV国际基金会个人主页-哔哩哔哩视频 参考:CNRV …

python+django社区医院诊所医疗管理系统_6t4o8

技术栈 后端:pythondjango 前端:vueCSSpythonScriptjQueryelementui 开发语言:Python 框架:django/flask Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCh…

计算机专业毕业设计项目推荐05-共享汽车管理系统(SpringBoot+Js+Mysql)

共享汽车管理系统(SpringBootJsMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计…

解码知识图谱:从核心概念到技术实战

目录 1. 概述什么是知识图谱知识图谱与自然语言处理的关系 2. 发展历程语义网络本体论大数据时代的知识图谱知识图谱与深度学习的融合 3. 研究内容知识图谱的建模与表示知识抽取知识图谱的融合与对齐知识图谱的推理知识图谱的评估与验证 4. 知识图谱表示与存储RDF:一…

基于java SpringBoot和HTML实验室预约管理系统设计

摘要 实验室信息管理系统是利用计算机网络技术、数据存储技术、快速数据处理技术对实验室进行全方位管理的计算机软件系统。实验室信息管理系统从最初仅完成数据存储和有限的网络功能,发展到现在可以处理海量数据,具备完善的管理职能,并且能够…

JavaScript中的浅拷贝与深拷贝

前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用。在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果。 浅拷贝是创建一个新对象或数组&#xf…

D*算法图文详解

前面学习了Dijkstra以及A* 算法的基本原理,对于这两种算法而言,我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而,这两个算法本身都是基于静态地图的,也就是说:当机器人找到路径后开始沿着起点向终点运动的…

不断探索创新 促进中国信息技术发展——南京宏控科技有限公司董事长应富忠

应富忠,男,现任南京宏控科技有限公司董事长、电子系统工程高级工程师(技术五级)、自动化系统注册工程师,先后被评为“研究所级青年突击手”、“研究所级先进工作者”、“研究所级优秀共产党员”、“南京市级考级优秀”…