MongoDB 最近遇到的几个小问题
(1)连接数据库时报错
ERROR Topshelf.Hosts.ConsoleRunHost.Run 1
An exception occurred
System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector
错误原因是和转义字符有关。连接字符串使用的URL格式,所以其中的密码中的% 需要转义。
知识扩展:
连接mongo使用URI有特殊字符 '@' 或者":"或者‘%’, 连接会报错,需要进行转义。
解决方法:
把 @ 换成 %40
把 : 换成 %3A
把 % 换成 %25
(2)时间字段的范围查询,请注意时间字段的类型。
例如,明看到集合中指定时间段内有数据,但是Count结果还是显示为0。

最早的一笔数据是20170816,但是使用以下语句查询2017-08-14 到 2018-08-18时间段内的文档数据为0.

问题在哪儿哪?
查看发现query.time字段类型是 string.

我们将查询语句的条件格式转换为字段的存储格式,就OK了。

所以,在设计集合模式时,要特别注意存储日期时间的字段的类型,建议为Date。另外,查询时也要小心,防止数据异常。
(3)副本集添加节点时报错
错误信息:
{
"ok" : 0,
"errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 172.XXX.XXX.XXX:27017; the following nodes did not respond affirmatively: 172.XXX.XXX.XX:27017 failed with No route to host",
"code" : 74,
"codeName" : "NodeNotFound"
}
错误原因是:防火墙没关闭 导致
(4)将常规集合设置为固定集合,既有的索引丢失,需要重建。
db.runCommand({"convertToCapped": "集合名字", size: XXXXXX,"max":XXXXX});
设置为固定集合后,原来的索引都丢失了,需要谨记 。
(曾经的一个转换性能测试,及转为固定集合的耗时:1001 W数据,16.8 G 约耗时 6分钟)
(5)mongodb 对字段中有超过 1024 字节的不会建立索引
MongoDB will not create an index on a collection if the index entry for an existing document exceeds the index key limit (1024 bytes). You can however create a hashed index or text index instead:
除了上面的介绍外,还可以修改启动配置参数 ailIndexKeyTooLong。
(6)配置分片的复制集需,在启动的配置文件中需 指定 shardsvr参数。否则,在启动数据库分片时报错。
错误信息如下:

在config文件中,添加 shardsvr=true 即可。
重启服务,再次启动启动分片,执行OK.

(7)MongoDB 服务异常关闭, the process must exit and restart
查看实例的运行log,报错信息如下:
--16T04::54.830+ E STORAGE [thread2] WiredTiger error () [:][:0x7f2b30e80700], file:WiredTiger.wt, WT_SESSION.checkpoint: /data/mongodb/XXXXXXXXXXX/data/db/WiredTiger.turtle.set: handle-write: pwrite: failed to write bytes at offset : No space left on device
--16T04::54.830+ E STORAGE [thread2] WiredTiger error () [:][:0x7f2b30e80700], file:WiredTiger.wt, WT_SESSION.checkpoint: /data/mongodb/XXXXXXXXXXX/data/db/WiredTiger.turtle.set: handle-write: pwrite: failed to write bytes at offset : No space left on device
--16T04::54.830+ E STORAGE [thread2] WiredTiger error () [:][:0x7f2b30e80700], file:WiredTiger.wt, WT_SESSION.checkpoint: WiredTiger.turtle: encountered an illegal file format or internal value
--16T04::54.830+ E STORAGE [thread2] WiredTiger error (-) [:][:0x7f2b30e80700], file:WiredTiger.wt, WT_SESSION.checkpoint: the process must exit and restart: WT_PANIC: WiredTiger library panic
--16T04::54.830+ I - [thread2] Fatal Assertion at src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
--16T04::54.830+ I - [thread2] ***aborting after fassert() failure --16T04::54.875+ F - [thread2] Got signal: (Aborted). 0x56500f890ee1 0x56500f88ffd9 0x56500f8904bd 0x7f2b378945e0 0x7f2b374f71f7 0x7f2b374f88e8 0x56500eb24d79 0x56500f59e366 0x56500eb2f329 0x56500eb2f545 0x56500eb2f79d 0x565010234400 0x565010232516 0x565010230e9f 0x5650102315df 0x56501027ee54 0x56501027fbd6 0x565010280f5b 0x565010281219 0x56501026e661 0x5650101e646d 0x7f2b3788ce25 0x7f2b375ba34d
----- BEGIN BACKTRACE -----
{"backtrace":[{"b":"56500E313000","o":"157DEE1","s":"_ZN5mongo15printStackTraceERSo"},{"b":"56500E313000","o":"157CFD9"},{"b":"56500E313000","o":"157D4BD"},{"b":"7F2B37885000","o":"F5E0"},{"b":"7F2B374C2000","o":"351F7","s":"gsignal"},{"b":"7F2B374C2000","o":"368E8","s":"abort"},{"b":"56500E313000","o":"811D79","s":"_ZN5mongo32fassertFailedNoTraceWithLocationEiPKcj"},{"b":"56500E313000","o":"128B366"},{"b":"56500E313000","o":"81C329"},{"b":"56500E313000","o":"81C545","s":"__wt_err"},{"b":"56500E313000","o":"81C79D","s":"__wt_panic"},{"b":"56500E313000"
看到这个错,有些发怵;不过有些信息还是很有用的,No space left on device。提示我们 是空间不足。
通过Zabbix 查看相应时间段内的可用空间(%)

确实在 04:54 左右可用空间耗尽。至此,问题已定位。
进一步考虑,为什么空间会短时间耗尽呢? 分析发现,这个时间段我们正在做完整备份,并且是先备份后压缩的方式,占用空间比较大。
优化方案调整为:MongoDB 实现备份压缩(https://www.cnblogs.com/xuliuzai/p/9594138.html)。
附注:
MongoDB是一种非关系型数据库(NoSql),很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
MongoDB 最近遇到的几个小问题的更多相关文章
- nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板
上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能.那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mo ...
- MongoDB中对象反序列化的一个小问题
今天在mongoDB存取对象数据的时候,碰到一个小问题:对象的某一个字段类型是抽象类或者接口.在存入的时候没有问题.可是在读取的时候,因为没有详细类的信息,无法完毕对象的又一次构建.就会报错: Can ...
- mongodb自动关闭:页面文件太小,无法完成操作
在一台两G内存的win server 2008电脑上运行一个程序,一段时间后mongod自动停止,发现日志文件最后有这样的错误: 2014-11-30T00:32:32.914+0800 [conn3 ...
- MongoDB学习笔记——分片(Sharding)
分片(Sharding) 分片就是将数据进行拆分,并将其分别存储在不同的服务器上 MongoDB支持自动分片能够自动处理数据在分片上的分布 MongoDB分片有三种角色 配置服务器:一个单独的mong ...
- 【转载】8天学通MongoDB——第三天 细说高级操作
今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...
- [译]MongoDb生产环境注意事项
译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...
- 8天学通MongoDB——第三天 细说高级操作
原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...
- 8天学通MongoDB
随笔分类 - MongoDB 双十一来了,别让你的mongodb宕机了 摘要: 好久没过来吹牛了,前段时间一直赶项目,没有时间来更新博客,项目也终于赶完了,接下来就要面临双十一这场惊心动魄的处女秀考验 ...
- Mongodb FAQ fundamentals(基础篇)
Mongodb FAQ(基础篇),是官方文档的翻译.如有翻译不到之处,还请谅解. 1.Mongdb是什么数据库? mongodb是一个面向文档(document)的数据库,既不支持表连接,也不支持事务 ...
随机推荐
- jQuery从零开始(三)-----ajax
jq当中的ajax技术 $.ajax $.get() $.post() $.load() $.ajax({ url:'请求文件的地址', type:'请求文件使用的方法', data:'向请求的api ...
- Sql注入之limit注入的学习
0x01 前言 今天听学长们交流漏洞挖掘的经验,提到了Limit注入,借此来学习一下limit注入 0x02 知识介绍 limit LIMIT[位置偏移量,]行数 其中,中括号里面的参数是可选参数,位 ...
- iOS 自定义导航栏
参考链接:https://blog.csdn.net/huanglinxiao/article/details/100537988 demo下载地址:https://github.com/huangx ...
- Linux:RPM安装工具的使用
RPM安装工具的使用 RPM包管理工具介绍 RedHat 软件包管理工具(RedHat Package Manager,RPM) RPM 软件包工具常用于软件包的安装.查询.更新升级.校验.卸载以及生 ...
- optix之纹理使用
1.在OpenGL中生成纹理texture optix中的纹理直接使用OpenGL纹理的id,不能跨越OpenGL纹理,所以我们先在OpenGL环境下生成一张纹理. 这个过程就很熟悉了: void W ...
- go语言设计模式之template
template.go package template import ( "strings" ) type MessageRetriever interface { Messag ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
- 5. IDEA使用
一.IDEA项目结构 二.创建项目 三.快捷键 Alt + Enter // 导包,自动修正代码 ctrl + Y // 删除光标所在行 ctrl + D // 复制光标所在行,插在光标位置下面 ct ...
- 0day2安全——笔记2
第二章 内存的不同用途 windows应用—>编译连接—>PE文件—>进程 进程使用的内存 1.代码区:储存着被装入执行的二进制机器代码,处理器会到这个区域取指和执行 2.数据区:用 ...
- 记一次job不跑的问题
就在昨晚app后台升级后,发现有个重要的job不跑了,导致业务无法正常的走下去.这时候心里慌得一批,但还好我们有多台服务器影响不大,屁话少说进入主题. 看了下job的实现,发现其使用了java.uti ...