(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 最近遇到的几个小问题的更多相关文章

  1. nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板

    上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能.那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mo ...

  2. MongoDB中对象反序列化的一个小问题

    今天在mongoDB存取对象数据的时候,碰到一个小问题:对象的某一个字段类型是抽象类或者接口.在存入的时候没有问题.可是在读取的时候,因为没有详细类的信息,无法完毕对象的又一次构建.就会报错: Can ...

  3. mongodb自动关闭:页面文件太小,无法完成操作

    在一台两G内存的win server 2008电脑上运行一个程序,一段时间后mongod自动停止,发现日志文件最后有这样的错误: 2014-11-30T00:32:32.914+0800 [conn3 ...

  4. MongoDB学习笔记——分片(Sharding)

    分片(Sharding) 分片就是将数据进行拆分,并将其分别存储在不同的服务器上 MongoDB支持自动分片能够自动处理数据在分片上的分布 MongoDB分片有三种角色 配置服务器:一个单独的mong ...

  5. 【转载】8天学通MongoDB——第三天 细说高级操作

    今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...

  6. [译]MongoDb生产环境注意事项

    译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...

  7. 8天学通MongoDB——第三天 细说高级操作

    原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...

  8. 8天学通MongoDB

    随笔分类 - MongoDB 双十一来了,别让你的mongodb宕机了 摘要: 好久没过来吹牛了,前段时间一直赶项目,没有时间来更新博客,项目也终于赶完了,接下来就要面临双十一这场惊心动魄的处女秀考验 ...

  9. Mongodb FAQ fundamentals(基础篇)

    Mongodb FAQ(基础篇),是官方文档的翻译.如有翻译不到之处,还请谅解. 1.Mongdb是什么数据库? mongodb是一个面向文档(document)的数据库,既不支持表连接,也不支持事务 ...

随机推荐

  1. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之八:安装报表扩展及最新更新

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. 记一次mq无法正常生产消息的事故排查过程

    早上上班后得知,服务费未同步到代理商系统.查看draft_server系统生产环境的log,显示在往RabbitMQ推数据时出现异常:no route to host. 2019-07-29 01:3 ...

  3. Linux—vi/vim命令详解

    如何在 vi 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...

  4. Druid-代码段-1-2

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程1.1,责任链的执行: //DruidDataSource类里的方法:获取连接 public DruidPooledConn ...

  5. CodeForces - 1263E(线段树维护前缀和最值)

    题意 https://vjudge.net/problem/CodeForces-1263E 您要设计一个只有一行的打字机,这一行的长度是无限大,一开始可以认为每个字符都是空.您的打字机有一个光标只指 ...

  6. Less(5)

    考查点:双查询报错注入 1.先判断注入类型 (1)首先看到要求,要求传一个ID参数,并且要求是数字型的:?id=1 (2)再输入?id=1' 显示报错,报错多了一个单引号 (3)再输入?id=1'' ...

  7. 201871010113-刘兴瑞《面向对象程序设计(java)》第十五周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  8. WPF 动态生成对象属性 (dynamic)

    原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定  可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...

  9. linux 判断文件夹或文件是否存在

    文件夹不存在则创建 if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi 文件存在则删除 i ...

  10. IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明

    Java语言里提供了支持多维数组的语法.但是这里还想说,从数组底层的运行机制上来看是没有多维数组的. Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存,数组元 ...