按照常理,把如下命令
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb
放在/etc/rclocal文件中就可以实现开机自启动了,第一次重启机器发现mongodb顺利启动了,再次重启机器后,通过ps没有查看到相应mongod进程,也就是启动失败了。原因是由于重启机器,导致非正常停止mongod服务,mongodlock中还记录了上次运行的进程号,为了数据的安全需要执行
/usr/local/mongodb/bin/mongod –repair,
当然如果直接把mongodlock文件删除也可以重新启动了,例如:
/usr/local/mongodb/bin/mongod --repair
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb
或
rm -rf /data/db/mongodlock
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb
注意上述启动Mongodb都是没有增加journal参数,如果带了此参数就不会那么麻烦了,例如
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb --journal就可以了,就算是非正常重启机器,mongodb也会根据日志去修复数据库的。
另外,如果mongodb的数据目录是通过mount的NFS文件夹,自启动好像有问题的。
MongoDB的日志增长的很快,/var所在的空间马上就占满了,即便换到另一个磁盘分区保存日志,日志还是增长的很快,磁盘眼看要告磬。
有一个好办法,就是使用旋转日志。
MongoDB的旋转日志有点怪,Linux下mongd服务接受一个kill -SGIUSR1命令后就立刻将当前日志文件重命名为带日期的文件,然后创建新的日志文件。
不想一般的旋转日志,可以配置旋转策略。不过没关系,经过测试,发送该命令时不会影响到MongoDB的服务。
下面是一个例子,先查找进程id, 然后发送命令。
root@jstc:/etc/initd# ps -def | grep mongod
mongodb 723 1 48 May04 6-22:23:53 /usr/bin/mongod --config /etc/mongodbconf
root 22035 22012 0 20:22 pts/2 00:00:00 grep --color=auto mongod
root@jstc:/etc/initd# kill -SIGUSR1 723
root@jstc:/etc/initd# cd /home/mongodb/log/
root@jstc:/home/mongodb/log# ls
mongodblog mongodblog2014-05-18T12-23-51
root@jstc:/home/mongodb/log# ls -alh
total 20G
drwxrwxrwx 2 root root 40K May 18 20:23
drwxrwxrwx 4 root root 40K Apr 20 21:25
-rw-r--r-- 1 mongodb nogroup 34K May 18 20:24 mongodblog
-rwxrwxrwx 1 mongodb nogroup 20G May 18 20:23 mongodblog2014-05-18T12-23-51
现在可以将之前20G的日志文件挪走或者删除了。
也可以自己先个定时脚本,定期发送命令给mongod服务。
在使用hiberate实现数据层时,总会打开hibernateshow_sql=true选项,显示hibernate生成的SQL语句。他们可以通过生成的SQL语句了解ORM使用和运行,并可以依据SQL语句优化程序。同理我们也希望在mongo java driver中看见生成 *** 作数据库语句日志。
直接使用mongo driver
在mongo driver加载之前设置如下系统属性:
[java] view plain copy print
// Enable MongoDB logging in general
SystemsetProperty("DEBUGMONGO", "true");
// Enable DB operation tracing
SystemsetProperty("DBTRACE", "true");
使用spring
spring使用了依赖注入,mongo driver加载由spring完成,所以也使用注入方法设置系统属性,设置方法如下:
[html] view plain copy print
<bean id="sysProps"
class="orgspringframeworkbeansfactoryconfigMethodInvokingFactoryBean">
<property name="targetClass" value="javalangSystem" />
<property name="targetMethod" value="getProperties" />
</bean>
<bean id="sysMongo"
class="orgspringframeworkbeansfactoryconfigMethodInvokingFactoryBean">
<property name="targetObject" ref="sysProps"/>
<property name="targetMethod" value="setProperty"/>
<property name="arguments">
<list>
<value>DEBUGMONGO</value>
<value>true</value>
</list>
</property>
</bean>
<bean id="sysDbTrace"
class="orgspringframeworkbeansfactoryconfigMethodInvokingFactoryBean">
<property name="targetObject" ref="sysProps"/>
<property name="targetMethod" value="setProperty"/>
<property name="arguments">
<list>
<value>DBTRACE</value>
<value>true</value>
</list>
</property>
</bean>
<mongo:mongo host="localhost" port="27017">
<mongo:options connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000" max-wait-time="1500" auto-connect-retry="true"
socket-keep-alive="true" socket-timeout="1500" slave-ok="true"
write-number="1" write-timeout="0" write-fsync="false" />
</mongo:mongo>
<mongo:db-factory dbname="ewcms" mongo-ref="mongo" />
日志效果
信息: localhost:27017
三月 30, 2012 3:31:46 下午 commongodbDBApiLayer trace
信息: find: ewcmssystemindexes { "name" : "name" , "ns" : "ewcmsperson" , "dropDups" : false , "sparse" : false , "unique" : false , "key" : { "name" : 1}}
三月 30, 2012 3:31:46 下午 commongodbDBApiLayer trace
信息: save: ewcmssystemindexes { "name" : "name" , "ns" : "ewcmsperson" , "dropDups" : false , "sparse" : false , "unique" : false , "key" : { "name" : 1}}
三月 30, 2012 3:31:46 下午 commongodbDBApiLayer trace
信息: find: ewcmssystemindexes { "name" : "cerId" , "ns" : "ewcmscertificate" , "dropDups" : false , "sparse" : false , "unique" : true , "key" : { "cerId" : 1}}
三月 30, 2012 3:31:46 下午 commongodbDBApiLayer trace
信息: find: ewcmssystemnamespaces { }
三月 30, 2012 3:31:46 下午 commongodbDBApiLayer trace
信息: find: ewcmscertificate { "brithdate" : { "$gt" : { "$date" : "1976-12-22T16:00:00000Z"} , "$lt" : { "$date" : "1976-12-24T16:00:00000Z"}}}
运行“locate mongo”命令查看系统默认把mongo装到了哪里,这里主要关注三个东西
(1)一个是名为“mongod”的程序的位置(他相当于mongo数据库的Server,需要一直在后台运行,我的路径:/usr/bin/mongod);
(2)一个是mongo 数据库log日志文件的位置(log日志文件要查看到具体的文件名,具体用法在后面有介绍,我的路径:/var/log/mongodb/mongodblog);
(3)一个是mongo的log日志的位置(我的路径:/var/log/mongodb/mongodblog)。
MongoDB 安装
sudo apt-key adv --keyserver hkp://keyserverubuntucom:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
#下面命令针对ubuntu1604版本,在其他ubuntu版本系统请查看MongoDB官网
echo "deb [ arch=amd64,arm64 ] >
以上就是关于linux下怎么打开mongodb的帮助文档全部的内容,包括:linux下怎么打开mongodb的帮助文档、MongoDB日志太大怎么办、mongodb-scala-driver 3.4.0怎么设置打印日志等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)