大家好,为什么mongodb存入的数据,第二天启动mongo的时候,删掉mongod.lock然后数据全没了,是什么原因?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
首先,mongod.lock是mongo服务端启动后在硬盘中创建的一个锁文件,如果你正常退出mongod服务,该文件即使还存在,也不会影响下一次启动mongod服务的。同时,这个文件还会记录mongod在运行过程中的一些状态,以便在正常重新启动服务时能够获取异常信息提示。
mongod.lock
mongo
mongod
注意:一般只有在非正常退出mongod服务时,才需要删除mongod.lock文件。正常退出,无需删除。
现在数据丢失,应该是非正常退出,即数据库崩溃,如果没有开启journal,那么就没办法保证数据的完整性了。
开启journal
所以在生产环境中一般都会开启journal。
如果数据没有备份,只能试试使用mongod内置的修复,运行mongod加上--repair选项:
--repair
mongod --dbpath /path/to/corrupt/data --repair
当正常关闭mongod时,会清除mongod.lock文件,下次启动时知道上次是完全关闭的。相反,如果lock文件没有被清除,mongod没有正常的关闭。
如果mongod检测到没有正常的关闭,不会让你再次启动,启动时会打印上次异常关闭的信息,需要你复制一份数据。然而,有些人已经意识到,可以通过删除这个lock文件来绕过这个检查。所以就有了删除这个文件的原因。在启动时删除lock文件意味着你不知道或不关心你的数据是否已经损坏。如果无法启动mongod,请修复你的数据,而不是删除lock文件。
解决办法
首先,
mongod.lock
是mongo
服务端启动后在硬盘中创建的一个锁文件,如果你正常退出mongod
服务,该文件即使还存在,也不会影响下一次启动mongod
服务的。同时,这个文件还会记录mongod在运行过程中的一些状态,以便在正常重新启动服务时能够获取异常信息提示。注意:一般只有在非正常退出
mongod
服务时,才需要删除mongod.lock
文件。正常退出,无需删除。现在数据丢失,应该是非正常退出,即数据库崩溃,如果没有
开启journal
,那么就没办法保证数据的完整性了。所以在生产环境中一般都会
开启journal
。如果数据没有备份,只能试试使用mongod内置的修复,运行
mongod
加上--repair
选项:是否要删除
mongod.lock
文件?当正常关闭mongod时,会清除mongod.lock文件,下次启动时知道上次是完全关闭的。相反,如果lock文件没有被清除,mongod没有正常的关闭。
如果mongod检测到没有正常的关闭,不会让你再次启动,启动时会打印上次异常关闭的信息,需要你复制一份数据。然而,有些人已经意识到,可以通过删除这个lock文件来绕过这个检查。所以就有了删除这个文件的原因。在启动时删除lock文件意味着你不知道或不关心你的数据是否已经损坏。如果无法启动mongod,请修复你的数据,而不是删除lock文件。