删除 mongodb 的日志文件安全吗?

如果我删除3.1 G 日志文件,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
51072 次浏览

您有两个选择。在启动 MongoDB 到 限制日志文件的大小到128MB 时使用 --smallfiles启动选项,或者使用 --nojournal选项关闭日志记录。在生产环境中使用 --nojournal通常是一个坏主意,而且在开发环境中使用不同的编写关注点通常也是有意义的,因此在开发环境和产品环境中没有不同的代码。

长话短说: 不,删除日志文件是不安全的,日志的概念是这样的:

写信来了。现在,为了使这个写操作持久化(以及数据库持久化) ,写操作必须以某种方式进入磁盘。

不幸的是,写入磁盘需要很长时间 与写入 RAM 相比,因此数据库进退两难: 不写入磁盘是有风险的,因为意外的关闭会导致数据丢失。但是,每次写入操作都写入磁盘将严重降低数据库的性能,以至于数据库无法用于实际目的。

现在,数据库不再对数据文件本身进行写操作,也不再对每个请求进行写操作,而是简单地将所有尚未提交到实际数据文件中的操作附加到一个日志文件中。这要快得多,因为文件已经“热”了,因为它一直都在被读写,而且它只有一个文件,而不是一堆文件,最后,因为它默认每100毫秒一批地写所有挂起的操作。中途删除这个文件会造成严重破坏。

正如 mnemosyn 的回答所解释的那样,日志记录对于存储引擎是必不可少的。幸运的是,它在一定程度上是可以被控制的。下面是为 MMAPv1存储引擎编写的,该引擎在 MongoDB 3.2之前是默认的。然后,连线虎成为首选的引擎,在这个答案的底部可以找到更多的信息。

MMAPv1

MongoDB < 2.6(非 YAML 配置)

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

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

现在,插入

smallfiles=true

然后保存.小文件,将日志文件限制为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 日志文件的最大大小限制约为100MB”。它将“以60秒或2GB 的日志数据间隔创建检查点(即将快照数据写入磁盘)”

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

从那以后,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