繁体   English   中英

删除mongodb的日志文件是否安全?

[英]Is it safe to delete the journal file of mongodb?

如果我删除3.1G日志文件, sudo service mongodb restart将失败。 但是,这个文件占用了太多空间。 我怎么解决这个问题? 我该如何删除它?

bash$ du -sh /var/lib/mongodb/*
4.0K    _tmp
65M auction_development.0
128M    auction_development.1
17M auction_development.ns
3.1G    journal
4.0K    mongod.lock

TL; DR:你有两个选择。 启动MongoDB时,请使用--smallfiles启动选项将日志文件的大小限制为128MB,或使用--nojournal选项关闭--nojournal 在生产中使用--nojournal通常是一个坏主意,并且在开发中使用不同的写入问题通常也是有意义的,因此您在dev和prod中没有不同的代码。

答案很长 :不,删除日志文件并不安全。 日记的想法是这样的:

写入进来。现在,为了使写入持久(并且数据库持久),写入必须以某种方式进入磁盘。

不幸的是, 与写入RAM相比 ,对磁盘的写入需要很长时间,因此数据库处于两难境地:不写入磁盘存在风险,因为意外关闭会导致数据丢失。 但是,为每次写入操作写入磁盘都会降低数据库的性能,使其无法用于实际目的。

现在不是写入数据文件本身,而是为每个请求执行此操作,数据库将简单地附加到日志文件,其中它存储尚未提交到实际数据文件的所有操作。 这要快得多,因为文件已经“热”,因为它一直在读取和写入,并且它只是一个文件,而不是一堆文件,最后,因为它每100ms批量写入所有待处理的操作默认情况下。 在某些事情中删除此文件会造成严重破坏。

正如mnemosyn的回答所解释的,日记对于存储引擎至关重要。 幸运的是,它可以在某种程度上得到控制。 以下是为MMAPv1存储引擎编写的,这是MongoDB 3.2之前的默认存储引擎。 然后, WiredTiger成为首选引擎,可以在此答案的底部找到更多信息。

MMAPv1

MongoDB <2.6(非YAML配置)

对于我们的开发服务器,我们使用以下过程:

cp -p /etc/mongodb.conf /etc/mongodb.conf.orig
vi /etc/mongodb.conf

现在,插入

smallfiles=true

进入mongodb.conf,然后保存。 smallfiles将日志文件限制为128MB。

service mongodb stop
rm -rf /var/lib/mongodb/journal/*
service mongodb start

MongoDB> = 2.6(YAML配置)

如果您正在使用具有YAML配置样式的 MMAPv1,请使用相同的步骤来备份上面的配置,但是进入

  mmapv1:

配置块,插入

    smallFiles: true 

然后,按照上述步骤重新启动服务器,同时删除日志。

WiredTiger(MongoDB> = 3.0,自3.2起默认)

在开发机器上,默认情况下,WiredTiger下的日志文件应该比MMAPv1下的日志文件小一些,因为日志压缩是默认启用的。 根据文档 ,“MongoDB的WiredTiger日志文件的最大大小限制大约为100 MB”。 它将“以60秒的间隔创建检查点(即将快照数据写入磁盘)或2千兆字节的日志数据。”

因此,如果您只在数据库上运行少量请求(几乎没有数据要更改),则使用WiredTiger的日志文件不应超过100 MB的低倍数。 但是,日志文件的大小似乎不可配置。

mongodb自那以后发展起来。 现在它的v3.4.1稳定了
我在v3.2上的方法如下:
取消注释# mmapv1:所以它看起来像:

  mmapv1:
    smallFiles: true 

如果您有不同的版本,请在reference/configuration-options页面上查找storage Options

不要忘记清空journal

sudo service mongodb stop
sudo rm -rf /var/lib/mongodb/journal/*
sudo service mongodb start

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM