You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VPS本地MongoDB文档数小时后自动删除问题求助

本地MongoDB文档自动删除问题排查方案

1. 彻底排查TTL索引

不管是通过Mongo Shell还是Mongoose代码,都能直接查看所有集合的索引:

  • Mongo Shell方式:登录本地MongoDB,切换到目标数据库后执行:
    db.getCollectionNames().forEach(col => { 
      print(`集合 ${col} 的索引:`); 
      printjson(db[col].getIndexes()) 
    })
    
    输出中如果存在带expireAfterSeconds字段的索引,就是会自动删除文档的TTL索引,直接删除该索引即可。
  • Mongoose代码方式:在机器人启动时添加一段代码,打印目标模型的索引信息:
    const YourModel = require('./models/yourModel'); // 替换为你的模型路径
    YourModel.collection.getIndexes().then(indexes => {
      console.log('当前模型的索引列表:', indexes);
    }).catch(err => console.error('获取索引失败:', err));
    

2. 检查MongoDB系统日志

本地MongoDB的日志默认路径:

  • Linux系统:/var/log/mongodb/mongod.log
  • 若自定义配置,查看mongod.conf中systemLog.path的配置项
    重点查找日志中是否有delete操作记录、MongoDB进程异常重启、磁盘空间不足等提示——这些都可能是文档丢失的原因。

3. 排查VPS资源与自动清理机制

  • 磁盘空间:执行df -h查看VPS磁盘使用情况,若磁盘已满,MongoDB可能无法持久化数据甚至触发异常清理。
  • 内存与OOM Killer:查看系统日志/var/log/syslog或/var/log/messages,搜索OOM或kill关键字,确认是否因内存不足导致MongoDB进程被系统强制杀死(进程重启可能导致数据丢失,若使用内存存储引擎则会直接清空数据)。
  • 定时清理任务:执行crontab -l查看当前用户的定时任务,同时检查/etc/cron.d/、/etc/cron.hourly/等系统级定时任务目录,确认是否有脚本自动清理MongoDB的数据目录。

4. 验证MongoDB持久化配置

检查mongod.conf中的关键配置:

  • 确认storage.journal.enabled = true:开启journal日志可保证数据持久化,避免意外重启丢失数据。
  • 确认storage.engine = wiredTiger:若配置为inMemory,数据仅存储在内存中,进程重启会直接清空所有数据。
  • 调整storage.wiredTiger.engineConfig.cacheSizeGB:建议设置为VPS可用内存的50%以内,防止内存不足导致MongoDB异常。

5. 隔离测试最小环境

暂时停止所有Minecraft服务器,仅运行Discord机器人与本地MongoDB,观察文档是否还会被删除。这一步可以排查是否有其他进程(比如Minecraft服务器的插件)连接到本地MongoDB并执行了删除操作。同时可在MongoDB日志中查看connection accepted记录,确认所有连接是否来自可信进程。

内容的提问来源于stack exchange,提问作者Lapirate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:12:49