千家信息网

Mongodb 日志原理和操作

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,日志原理:WiredTiger使用检查点在磁盘上提供一致性数据视图,并允许MongoDB从上一个检查点恢复。 但是,如果MongoDB在检查点之间意外退出,则需要使用日志记录来恢复上次检查点之后发生的
千家信息网最后更新 2025年11月14日Mongodb 日志原理和操作

日志原理:

WiredTiger使用检查点在磁盘上提供一致性数据视图,并允许MongoDB从上一个检查点恢复。 但是,如果MongoDB在检查点之间意外退出,则需要使用日志记录来恢复上次检查点之后发生的信息。

通过日志记录,恢复过程如下:

查看数据文件以查找上一个检查点的标识符。

在日志文件中搜索与上一个检查点的标识符相匹配的记录。

自上次检查点以来,在日志文件中应用这些操作。

MongoDB WiredTiger 首先使用内存缓冲来存储日志记录,直到超过128 kB,才写入磁盘。根据以下时间间隔或条件,WiredTiger将缓冲的日记记录同步到磁盘:

3.2版新增功能:每50毫秒。

版本3.6中:MongoDB 设置检查点以60秒的间隔执行。

如果写入操作包含 j:true 的写入指令,则WiredTiger会强制WiredTiger日志文件同步。

由于MongoDB使用的日志文件大小限制为100 MB,WiredTiger大约每隔100 MB创建一个新的日志文件。当WiredTiger创建新的日志文件时,WiredTiger将同步前一个日志文件。

注意: 在写操作之间,当日志记录保留在WiredTiger缓冲区中时,在mongod强制关闭时更新可能会丢失。

日志方式:

  1. 不开启 journal ,写入 wiredtiger 的数据,并不会立即持久化存储;而是每分钟会做一次全量的checkpoint( storage.syncPeriodSecs 配置项,默认为1分钟),将所有的数据持久化。
  2. 开启 journal 后 ,每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。这样即使出现宕机,启动时 Wiredtiger 会先将数据恢复到最近的一次checkpoint的点,然后重放后续的 journal 操作日志来恢复数据。

MongoDB 里的 journal 行为 主要由2个参数控制, storage.journal.enabled 决定是否开启journal, storage.journal.commitInternalMs 决定 journal 刷盘的间隔( journal操作的最大间隔时间。可以是2-300ms之间的值,低的值有助于持久化,但是会增加磁盘的额外负担。

如果journal和数据文件在同一磁盘上,默认为100ms。如果在不同的磁盘上为30ms。

如果强制mongod提交日志文件,可以指定j:true,指定后,时间变为原来的三分之一 ),默认为100ms,用户也可以通过写入时指定 writeConcern 为 {j: ture} 来每次写入时都确保 journal 刷盘。

日志切换:

use admin

db.runCommand( { logRotate : 1 } )

后者:

1 3 * * * killall -SIGUSR1 mongod
3 3 * * * killall -SIGUSR1 mongos

15 3 * * * /usr/bin/find /data/mongodb/data/prod_shard2_1/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

19 3 * * * /usr/bin/find /data/mongodb/data/prod_configdb2/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

21 3 * * * /usr/bin/find /data/mongodb/data/prod_mongos/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

日志级别在配置文件中的加入:

use admin
db.runCommand( {
setParameter: 1,
logComponentVerbosity: {
verbosity: 1,
query: {
verbosity: 2
},
storage: {
verbosity: 2,
journal: {
verbosity: 1
}
}
}
} )

或者:

verbose&&quiet

mongodb默认情况下日志文件非常大,每秒都会记录大量的connection等调试信息,这对于我们管理日志和定位 错误有很大影响,需要修改它的默认日志级别。

mongodb的日志级别在配置文件中的verbose和quiet参数决定。verbose表示会打印debug信息,范例配置如下

verbose=true

vv=true

注:这里的vv表示debug级别,有vv-vvvvv,v越多则记录的日志信息越详细。

而如果设置了quiet=true参数,表示安静地输出,即不会再有debug信息,日志中只会打印一些关键的信息,比如 自动故障切换,系统错误等信息,相当于error log。这时需要注释掉verbose参数。范例配置如下:

#verbose=true

quiet=true

日志 文件 数据 检查点 检查 信息 磁盘 配置 参数 级别 之间 时间 同步 强制 缓冲 标识 标识符 范例 错误 切换 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 奉贤区高科技软件开发节能标准 sql数据库转换mysql 赤峰市网络安全知识有奖答题 网络安全注意事项高中 网络安全技能价值分析 企业与个人网络安全 如何判断数据库有新数据写入 云虚拟主机和云服务器区别 学校装服务器要多少钱一台 ai系统自动驾驶软件开发 宣传网络安全800字观后感 保定职业技术学院计算机网络技术 宝山区会计数据库系统销售职能 郑州市耀影软件开发有限公司 易语言服务器其他硬件可以连接吗 忍者必须死选哪个服务器 服务器系统没激活可以用么 超频服务器内存好还是普通内存好 导入数据库和附加富数据库 网络安全为何重要宣传语 开平区企业网络技术创造辉煌 实施网络安全战略规划 权图在软件开发中的作用 java 记录数据库 广州软件开发专业 数据库测试显示乱码 网络技术服务费账务处理 网络安全做什么工资高 联投网络安全是什么意思 千人千面的数据库
0