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


70

如果删除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

Answers:


75

TL; DR:您有两个选择。--smallfiles启动MongoDB时,请使用启动选项将日记文件的大小限制为128MB,或使用该--nojournal选项关闭日记功能--nojournal在生产中使用通常是一个坏主意,在开发中也使用不同的写关注点通常很有意义,因此您在开发和生产中没有不同的代码。

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

进入写入操作。现在,要使该写入操作具有持久性(并使数据库具有持久性),则必须以某种方式将写入操作转到磁盘。

不幸的是,与对RAM的写入相比,对磁盘的写入要困难得多,因此数据库处于两难境地:不写入磁盘是有风险的,因为意外关闭会导致数据丢失。但是,每执行一次写入操作就将磁盘写入磁盘会严重降低数据库的性能,以至于无法用于实际目的。

现在,数据库不再写数据文件本身,也不是针对每个请求都写数据文件,而是简单地追加到日记文件中,在日记文件中存储尚未提交给实际数据文件的所有操作。这要快得多,因为文件一直被读写,因此它已经很“热”了,它只是一个文件,而不是一堆文件,最后,因为它每隔100ms一次写入所有待处理的操作默认。在某些情况下删除此文件会造成严重破坏。


信息解答-是否可以清除日志文件?要释放空间?
wmock 2014年

2
@wmock仅当您smallfiles在(Mitjas答案)[ stackoverflow.com/a/25516871/1318694]中添加了该选项并且在删除之前干净地停止了数据库时。如果每次启动数据库都丢失,将重新创建日志文件。该smallfiles选项更改这些文件的大小。
马特

我只是想知道默认情况下拥有3 gig日志文件的理由是什么。他们是否期望普通用户每100毫秒修改3个数据?
马丁·佩卡

日志文件仅追加,因此不会每100毫秒删除或清空一次。一旦达到1gig大小,它们就会旋转,并且不再需要它们时(即,已应用所有更改时)将删除它们。这就引入了另一种复杂性,持久性线程需要确保没有挂起的写操作,因此有可能两个到三个文件共存。参见docs.mongodb.org/manual/core/journaling/#journal-files
mnemosyn 2015年

73

正如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配置)

如果您将MMAPv1与YAML配置样式一起使用,请使用与上述相同的步骤来备份配置,但是

  mmapv1:

配置块,插入

    smallFiles: true 

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

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

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

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


1
配置文件格式在2.6版中更改为YAML。请参阅:docs.mongodb.org/manual/reference/configuration-options/…– Skarllot
2016年

感谢@Skarllot指出这一点。由于我不再使用MongoDB,因此如果有人将我的答案扩展到2.6版,我将不胜感激。
米塔(Mitja)

我更新了答案以反映YAML和WiredTiger。
米塔(Mitja)

如果我们已经部署了RAID 10群集,并且为日记文件分配的空间有限,是否可以限制日记文件的数量?
西里尔·杜尚-多丽丝

9

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

  mmapv1:
    smallFiles: true 

如果您使用其他版本,请storage Optionsreference/configuration-options页面上查找。

别忘了清空 journal

sudo service mongodb stop
sudo rm -rf /var/lib/mongodb/journal/*
sudo service mongodb start
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.