redis 官方没有 Windows 版的,微软维护的已经很久没更新了,因此就在想着换成 MongoDB。redis
因而一趟被我复杂化的踩坑之旅就开始了,同时也记录一下,避免有人碰见跟我同样的问题。mongodb
首先在 官网 上下载 msi 安装包开始安装。
我不喜欢把软件装在系统盘,因此我选择 Custom,本身选要装在哪里,而后就跳出来下面这张图。针对下面这张图我翻译一下官方文档上的内容做为解释。
从 MongoDB 4.0 开始,默认状况下,你能够在安装期间配置和启动 MongoDB 做为服务,并在成功安装后启动 MongoDB 服务。也就是说,MongoDB 4.0 已经不须要像之前版本那样输入一堆命令行来将 MongoDB 配置成 Windows 服务来自动运行了,方便了不少。浏览器
Install MongoD as a Service
。若是你选择将 MongoDB 配置为服务,则能够:bash
指定如下列用户之一运行服务:网络
Account Domain
指定为 .
,并为该用户指定 Account Name
和 Account Password
。Account Domain
,Account Name
和 Account Password
。指定 Service Name
。若是你已拥有具备指定名称的服务,则必须选择其余名称。spa
Data Directory
(数据保存目录),对应于 --dbpath
。若是该目录不存在,安装程序将建立该目录并为服务用户设置访问权限。Log Directory
(日志保存目录),该目录对应于 --logpath
。若是该目录不存在,安装程序将建立该目录并为服务用户设置访问权限。而后到了这一步,不要勾选 Install MongoDB Compass
。 命令行
而后,就出问题了。看他的提示说的是 MongoDB Server
服务没法启动,确保你有足够的权限启动系统服务。 翻译
???没有权限吗,右键属性安装包发现没办法使用管理员启动。因而我就跟着这个线索去找资料了。3d
有说使用管理员启动命令提示符,而后进行安装的,我试了下,没用。而后我根据官网上的无人值守安装教程来作,发现连最基本的文件都解压不彻底。【怒摔日志
没有办法在安装时候解决这个问题,那么只有先忽略了。
而后根据官网上的教程来手动启动服务试一下,在 MongoDB 安装文件夹的 bin 文件夹下,使用管理员权限打开 PowerShell:
而后输入:
.\mongod --dbpath="E:\MongoDB\data"
从返回的命令来看没问题,最后一条是等待端口 27017 上的链接,因此我在浏览器中输入了 127.0.0.1:27017
:
能够访问,没毛病啊。
因此服务为何不能启动呢?
我尝试使用 net start MongoDB
命令来启动,失败:
继续深挖,在任务管理器的服务里面找到 MongoDB,发现状态是 已中止
,右键开始,提示 服务没有及时响应启动或控制请求
。
再来,在任务管理器下方 打开服务
,找到 MongoDB Server,查看它的属性,看看有什么猫腻。
这里能够看到可执行文件的路径是这样的:E:\MongoDB\bin\mongod.exe --config "E:\MongoDB\bin\mongod.cfg" --service
。
也就是说,启动 MongoDB Server 服务时运行的也是这条命令,因而我手动运行了这条命令:
Unrecognized option: mp
,未识别的选项:mp,这是个啥?
mongod 命令后的 --config
是指定运行 mongod 时的配置文件,因而在 bin 文件夹下找到 mongod.cfg
文件,打开:
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: E:\MongoDB\data journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: E:\MongoDB\log\mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp: mp:
终于发现隐藏在最后一行的 mp:
,找得我好苦,而后又在配置文件中列出的网址中翻了一圈,没有发现有 mp:
这个选项。在解决问题时我曾经试着在 C 盘上安装 MongoDB,一切顺利,没有任何报错,因此我对比了一下安装在两个盘上的配置文件,发现差异就只是最后的这个 mp:
。
当我把最后一行的 mp:
删掉后,从新启动服务,成功了!!!
将 bin 文件夹设置进系统环境变量能够大大方便在命令提示符中使用 mongo 等命令,这里就不细说了。
我也不知道为何安装在非系统盘上时,mongod.cfg
文件会无端多出来这么使人抓狂的一行,我看其余教程都没有提到这个问题,也许只有我电脑会出现这种状况。中途我还很复杂地将 Network Service 用户添加到了 User 组里,虽然不知道为何这也解决了问题,可是后面发现原来只须要删掉一行就好了。
因此解决问题中走了不少弯路,踩了不少坑,不过也收获了不少。若是有谁能解释这个现象,欢迎指教~
若是是使用 msi 进行安装,因为 MongoDB 4.0 自动安装配置成 Windows 服务,也就不须要大部分教程里的像 mongod --dbpath "C:\MongoDB\data\db" --logpath "C:\MongoDB\data\log\mongo.log" --install --serviceName "MongoDB"
这样的语句了,除非下载的是单纯的压缩包,我看到不少 4.0 的教程下载的是 msi 安装包,都还在使用命令提示符配置 MongoDB 成服务,因此这不是画蛇添足吗?
MongoDB Server 启动时会调用 mongod.cfg 配置文件,因此要调整配置,直接按照官方文档里的说明修改该文件就行。log 文件会记录不少有用的信息,若是使用 mongod 或 mongo 有地方报错了或者想知道更详细的信息能够查看日志。
好比说你已经使用 msi 安装好了,而后又使用上面那条语句,在命令提示符里只有这样的提示:
可是打开日志文件就会发现:
已经安装过 MongoDB 服务了,因此上面那句至关于没用了。
勤思考,不随波逐流,多看官方文档,技术才能进步。
有人说,先删除服务,在建服务,试了,对我没用。
简单点,直接进入db文件夹,先删除 mongod.lock 文件,而后从新启动服务便可;要是还不行,就继续删 storage.bson文件,而后问题就解决了~