一日一技:手动rotate MongoDB的日志

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 一日一技:手动rotate MongoDB的日志

默认情况下,MongoDB的日志始终会写到同一个文件中。在Linux系统下,这个日志文件为 /var/log/mongodb/mongodb.log。随着时间的推移,这个文件会越来越大:

kingname@xxx:/var/log/mongodb$ ls -lh
total 43G
-rw------- 1 mongodb mongodb 43G Jun  6 17:54 mongod.log

这样的大日志占用了太多了储存空间。但由于此时MongoDB正在往里面写入数据,所以不应该直接删除它,否则可能会导致不可预料的问题。

现在需要让MongoDB把日志写到另一个文件中,从而释放当前文件,然后再删除这个大日志文件。

要实现这个目的,可以使用MongoDB的 rotate功能。在MongoDB的官方文档中写到:

When used with the --logpath option or systemLog.path setting, mongod and mongos instances report a live account of all activity and operations to a log file. When reporting activity data to a log file, by default, MongoDB only rotates logs in response to the logRotate command, or when the mongod or mongos process receives a SIGUSR1 signal from the operating system.

翻译过来就是,当你通过 --logpath参数指定了日志的位置以后,MongoDB会始终把日志写到这个文件中,除非你执行了 logRotate命令,或者MongoDB的进程收到了 SIGUSR1信号。

文档地址为:https://docs.mongodb.com/manual/tutorial/rotate-log-files/

文档中提到了两种办法:

执行 logRotate命令

进入MongoDB的shell中:

kingname@xxx:/var/log/mongodb$ mongo 
# 切换到admin库
> use admin
switched to db admin
# 执行命令rotate日志
> db.adminCommand( { logRotate : 1 } )

命令执行完成以后,退出MongoDB的Shell,重新查看日志文件夹,可以发现如下图所示:

此时, mongod.log文件变成了22KB,而多出一个 mongod.log.2019-06-06T09-54-03,这个文件有43GB,这就是之前的大日志文件。MongoDB在Rotate日志的时候,会首先把原来的日志改名为 mongod.log.日期,然后重新创建一个新的 mongod.log文件,并把新的日志写入进去。

现在就可以直接删除 mongod.log.2019-06-06T09-54-03从而释放硬盘空间了。

向MongoDB进程发送信号

第二种方式,就是向MongoDB的进程发送信号。为了实现这个目的,首先需要获得进程的 pid。在Linux或者mac中执行命令:

# 在Linux下用-aux
ps -aux | grep mongo
# 在mac下用-ef
ps -ef | grep mongo

从左数第二项就是MongoDB的PID,如下图所示:

此时,执行命令:

# kill -SIGUSR1 PID
kill -SIGUSR1 561

就可以实现rotate日志。这个地方的命令虽然是 kill,但是不用担心,这并不是杀死MongoDB的进程,只是给它发一个信号而已。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
NoSQL MongoDB Docker
Docker Compose安装MongoDB,并向宿主机映射数据文件/配置文件/日志文件
本文为博主实践Docker Compose方式安装MongoDB记录,希望对大家有所帮助。
2398 0
|
12月前
|
JSON 缓存 负载均衡
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
|
12月前
|
JSON 缓存 负载均衡
Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
|
NoSQL Java 测试技术
利用 Log4j2 异步保存日志到 MongoDB 中
利用 Log4j2 异步保存日志到 MongoDB 中
|
监控 NoSQL MongoDB
MongoDB数据的导出导入及日志分析
MongoDB数据的导出导入及日志分析
520 0
|
存储 缓存 NoSQL
分布式服务器框架之Servers.Core中 实现Log模块设计 写入MongoDB数据库
游戏服务器中都需要用到Log模块,log模块存在的意义第一个是将log输出到控制台又或者是写入到log文件中,出了BUG方便定位;第二是常用于将用户的数据(例如玩家登录、道具购买量)将这种log统计到数据库中,方便统计用户留存信息、数据分析等。
|
28天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
89 1
|
29天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
81 1
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
102 1
|
2月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0