首先介绍一下mongodb的日志模块,

Log:它主要负责用户日志文件,这和我们普通系统的日志系统没有什么区别,作用也就是记录系统的一些重要流程,然后持久化到log文件。这个log文件可以通过系统启动参数.

mongodb --logpath /usr/local/var/log/mongodb/mongo.log


Journal:主要用于解决因系统宕机时,内存中的数据未写入磁盘而造成的数据丢失(为什么数据会被放到内存做存储而不是直接对外存上的文件进行操作呢?这一点与MongoDB的存储机制有关。其机制主要是通过log方式定时将操作日志(对数据库有更改的操作,查询不在记录范围之类)记录到dbpath的命名为journal文件夹下,这样当系统再次重启时从该文件夹下恢复丢失的数据。

启动该模块可以用


mongodb --journal


另外journal在64位系统默认是启动的,32位系统默认不启动。

Oplog:当部署应用于生产的健壮的服务器时,需要对服务器进行同步备份,MongoDB为解决这一问题提出了复制集(Replicasets)模式,而Oplog的作用则主要是负责记录写服务器(一个复制集内只有一台服务器可写,多台备份服务器可读)上所有对数据的更改(查询等对数据库不产生更改的操作不会被记录),这样,复制集内的其他读扩展(即用于备份的机器和分散读压力的服务器)的服务器通过获取Oplog就可以进行差异同步了。

下面我们说一下mongodb异常退出如何解决,我们首先不应该考虑直接删除mongod.lock文件,如果真的没有其他办法了我们再选择删除mongod.lock文件,删除之后我们还得修复一下数据库。

如果没有缓存文件我们可以先执行一遍


sudo mongod --repair (参数我们可以自己去设置如--repairpath)


然后使用mongodb启动服务,如果有journal文件我们先执行


sudo mongod --journal



恢复缓存文件,如果这个执行还不可以启动我们在执行一次sudo mongod --repair的操作。参考地址:

http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/

查看日志列表首先切换到admin用户

> use admin

switched to db admin

> show logs

查看具体的日志文件

> show log global

> db.runCommand( { getLog : "global" } )